Laravel 路由
[toc]
路由
创建路由
路由文件位于 routes/web.php
在 Laravel 中我们较为常用的几个基本的 HTTP 操作分别为 GET、POST、PATCH、DELETE。
GET 常用于页面读取
POST 常用于数据提交
PATCH 常用于数据更新
DELETE 常用于数据删除
注册路由:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
例:
Route::get('/test','TestController@test');
访问 /test 时调用 TestController 控制器的 test方法
表单方法伪造
<form action="/foo/bar" method="POST">
<p>伪造一个put方法 其他方法只需要修改下面input的value </p>
<input type="hidden" name="_method" value="PUT">
<!--patch delete options-->
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
CSRF 保护
指向 web 路由文件中定义的 POST、PUT 或 DELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝。
<form method="POST" action="/profile">
{{ csrf_field() }}
</form>
{{ csrf_field() }}该方法会生成一个隐藏的input 里面有CSRF的token
<input type="hidden" name="_token" value="这里是token">
参数路由
Route::get('test/{var}','TestController@test');
Route::get('test2/{var?}', function (var = null) {
return $var;
});
其中的{var}为参数
在控制器中可以通过 $request->var 获取
第二个路由为可选参数路由 但是其指必须有默认值
use Illuminate\Http\Request;
`
`
pubcli function test(Request $request ){
$var =$request->var;
}
命名路由
Route::get('test/{var}','TestController@test')->name('test');
name方法给路由取了个名字
调用:
route('test');
资源路由
Route::resource('users', 'UsersController');
// 上面代码将等同于:
Route::get('/users', 'UsersController@index')->name('users.index'); //显示所有用户列表的页面
Route::get('/users/create', 'UsersController@create')->name('users.create'); //创建用户的页面
Route::get('/users/{user}', 'UsersController@show')->name('users.show'); //显示用户个人信息的页面
Route::post('/users', 'UsersController@store')->name('users.store'); //创建用户
Route::get('/users/{user}/edit', 'UsersController@edit')->name('users.edit'); //编辑用户个人资料的页面
Route::patch('/users/{user}', 'UsersController@update')->name('users.update'); //更新用户
Route::delete('/users/{user}', 'UsersController@destroy')->name('users.destroy'); //删除用户
生成的资源路由列表信息如下所示:
HTTP 请求 | URL | 动作 | 作用 |
---|---|---|---|
GET | /users | UsersController@index | 显示所有用户列表的页面 |
GET | /users/{user} | UsersController@show | 显示用户个人信息的页面 |
GET | /users/create | UsersController@create | 创建用户的页面 |
POST | /users | UsersController@store | 创建用户 |
GET | /users/{user}/edit | UsersController@edit | 编辑用户个人资料的页面 |
PATCH | /users/{user} | UsersController@update | 更新用户 |
DELETE | /users/{user} | UsersController@destroy | 删除用户 |
你可以通过将数组传参到 resources 方法中的方式来一次性的创建多个资源控制器:
Route::resources([
'photos' => 'PhotoController',
'posts' => 'PostController'
]);
声明资源路由时,你可以指定控制器应该处理的部分行为,而不是所有默认的行为:
//只创建部分行为
Route::resource('photos', 'PhotoController')->only([
'index', 'show'
]);
//部分行为除外
Route::resource('photos', 'PhotoController')->except([
'create', 'store', 'update', 'destroy'
]);