忘记了就查查:
助手方法:redirect() url() view() action() route() config() with()
键值属性:
['as'=>'a2','uses'=>'PagesController@about’]
['middleware' => 'auth','uses' => 'UserController@showProfile’]
路由组:
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard1', function () {
// Route named "admin::dashboard1”
return "admin::dashboard1”;
}]);
});
控制器构造方法:
public function __construct()
{
$this->middleware('auth');
$this->middleware('log', ['only' => ['fooAction', 'barAction']]);
$this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
}
注册一个指向控制器的资源路由:
Route::resource('photo', 'PhotoController’);
资源管理器处理的动作:
Verb | Path | Action | Route Name |
GET | /photo | index | photo.index |
GET | /photo/create | create | photo.create |
POST | /photo | store | photo.store |
GET | /photo/{photo} | show | photo.show |
GET | /photo/{photo}/edit | edit | photo.edit |
PUT/PATCH | /photo/{photo} | update | photo.update |
DELETE | /photo/{photo} | destroy | photo.destroy |
Route::resource('photo', 'PhotoController',
['only' => ['index', 'show']]);
Route::resource('photo', 'PhotoController',
['except' => ['create', 'store', 'update', 'destroy']]);
命名资源路由:
Route::resource('photo', 'PhotoController',
['names' => ['create' => 'photo.build']]);
嵌套资源:一个照片资源可能会附加有很多的“评论” photos/{photos}/comments/{comments}
Route::resource('photos.comments', 'PhotoCommentController’);
扩展资源控制器:注意顺序
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController’);
隐式控制器:
Route::controller('users', 'UserController’);
public function getShow($id) 响应/users/show/1的GET请求
public function getAdminProfile() 响应/users/admin-profile的GET请求
指定路由名称:
Route::controller('users', 'UserController', [
'getShow' => 'user.show',
]);
也可以一次性多个;
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
'p' => 'PagesController',
]);
Request Information:
$uri = $request->path();
$request->is('admin/*’)
$url = $request->url();
$method = $request->method();
$request->isMethod('post’)
Retrieving Input:
$name = $request->input('name’);('name', 'Sally');
array inputs,use "dot” notation:$input = $request->input('products.0.name');
$request->has('name’)
$input = $request->all();
$input = $request->only('username', 'password');
$input = $request->except('credit_card’);
Flashing Input To The Session:$request->flash();
$request->flashOnly('username', 'email');
$request->flashExcept('password’);
Flash Input Into Session Then Redirect:
return redirect('form')->withInput();
return redirect('form')->withInput($request->except('password'));
Retrieving Old Data:
$username = $request->old('username’); or {{ old('username') }}
Retrieving Cookies:$value = $request->cookie('name’);
Attaching A New Cookie:
$response = new Illuminate\Http\Response('Hello World');
$response->withCookie(cookie('name', 'value', $minutes));
return $response;
long-lived cookie:$response->withCookie(cookie()->forever('name', 'value'));
Retrieving Uploaded Files:
$file = $request->file('photo’);
$request->hasFile('photo’)
Validating Successful Uploads:$request->file('photo')->isValid()
Moving Uploaded Files:
$request->file('photo')->move($destinationPath);
$request->file('photo')->move($destinationPath, $fileName);
http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/File/UploadedFile.html
视图:
resources/views/greeting.php
return view('greeting', ['name' => 'James']);
文件夹下:return view('admin.profile', $data);
view()->exists('emails.customer’)
$view = view('greeting')->with('name', 'Victoria’);
数据共享给所有的视图:
AppServiceProvider类下的boot()方法: view()->share('key', 'value’);
视图组件绑定到多个视图:
view()->composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
视图创建者:
view()->creator('profile', 'App\Http\ViewCreators\ProfileCreator’);
扩展布局模版:@extends('layouts.master’)
@section('title', 'Page Title')
@section('sidebar')
@@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
Blade & JavaScript 框架:Hello, @{{ name }}.
数据存在就将其输出:{{ $name or 'Default' }}
不希望自己的数据被htmlentities转义:Hello, {!! $name !!}.
@unless 指令:
@unless (Auth::check())
You are not signed in.
@endunless
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
@while (true)
<p>I'm looping forever.</p>
@endwhile
引入子视图(继承父视图数据,又可以额外引入):
@include('shared.errors’) @include('view.name', ['some' => 'data’])
注释:{{-- This comment will not be present in the rendered HTML —}}
Service Injection:
@inject('metrics', 'App\Services\MetricsService’)
{{ $metrics->monthlyRevenue() }}
自定义指令:
创建一个 @datetime($var) 指令:
public function boot()
{
Blade::directive('datetime', function($expression) {
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
}
数据库:
Running Raw SQL Queries:
$users = DB::select('select * from users where active = ?', [1]);
$results = DB::select('select * from users where id = :id', ['id' => 1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
$deleted = DB::delete('delete from users’);
Running A General Statement:DB::statement('drop table users’);
Database Transactions:automatically rolled back or committed
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
Manually Using Transactions:
DB::beginTransaction();
DB::rollBack();
DB::commit();
Query Builder:
$users = DB::table('users')->get();
$user = DB::table('users')->where('name', 'John')->first();
$email = DB::table('users')->where('name', 'John')->value('email’);
Chunking Results From A Table:
DB::table('users')->chunk(100, function($users) {
foreach ($users as $user) {
// return false; //stop further chunks from being processed
}
});
Retrieving A List Of Column Values:
$titles = DB::table('roles')->lists('title');
foreach ($titles as $title) {
echo $title;
}
specify a custom key column for the returned array:
$roles = DB::table('roles')->lists('title', 'name');
foreach ($roles as $name => $title) {
echo $title;
}
Aggregates:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price’);
$price = DB::table('orders')
->where('finalized', 1)
->avg('price’);
Specifying A Select Clause:
$users = DB::table('users')->select('name', 'email as user_email')->get();
$users = DB::table('users')->distinct()->get();
add a column to its existing select clause:
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
Raw Expressions:
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
Inner Join Statement:
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
Advanced Join Statements:
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);//orWhere
})
->get();
Unions:
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first) //unionAll
->get();
Where Clauses:
$users = DB::table('users')->where('votes', '=', 100)->get();
$users = DB::table('users')->where('votes', 100)->get();
$users = DB::table('users')->where('votes', '>=', 100)->get();
$users = DB::table('users')->where('votes', '<>', 100)->get();
$users = DB::table('users')->where('name', 'like', 'T%')->get();
$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();
whereBetween:
$users = DB::table('users')->whereBetween('votes', [1, 100])->get();
$users = DB::table('users')->whereNotBetween('votes', [1, 100])->get();
whereIn / whereNotIn:
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = DB::table('users')->whereNotIn('id', [1, 2, 3])->get();
whereNull / whereNotNull:
$users = DB::table('users')->whereNull('updated_at')->get();
$users = DB::table('users')->whereNotNull('updated_at')->get();
Advanced Where Clauses:
Parameter Grouping:
DB::table('users')
->where('name', '=', 'John')
->orWhere(function ($query) {
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
Exists Statements:
DB::table('users')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
orderBy:
$users = DB::table('users')
->orderBy('name', 'desc')
->get();
groupBy / having / havingRaw:
$users = DB::table('users')
->groupBy('account_id')
->having('account_id', '>', 100)
->get();
$users = DB::table('orders')
->select('department', DB::raw('SUM(price) as total_sales'))
->groupBy('department')
->havingRaw('SUM(price) > 2500')
->get();
skip / take:
$users = DB::table('users')->skip(10)->take(5)->get();
Inserts:
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
Auto-Incrementing IDs:
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
Updates:
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
Increment / Decrement:
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
DB::table('users')->increment('votes', 1, ['name' => 'John']);
update `users` set `votes` = `votes` + 1, `name` = ?
Deletes:
DB::table('users')->delete();
DB::table('users')->where('votes', '<', 100)->delete();
DB::table('users')->truncate();
Pessimistic Locking:
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();