Laravel路由设置
创建路由
路由的作用是在用户访问指定页面时将页面URL匹配到被执行的控制器或匿名函数。默认情况下,所有的Laravel路由都定义在app/Http/routes.php。
<?php
use App\Task;
use Illuminate\Http\Request;
/**
* Display All Tasks
*/
Route::get('/', function () {
//
});
/**
* Add A New Task
*/
Route::post('/task', function (Request $request) {
//
});
/**
* Delete An Existing Task
*/
Route::delete('/task/{id}', function ($id) {
//
});
1.基本路由
最基本的路由接收一个URI和一个闭包
Route::get('/',function(){
return "some view";
})
2.为多个动作注册路由
有时候需要注册一个路由来响应多个不同的HTTP动作,可以使用Route的match或者any方法来实现,对应的路由由url()助手函数来生成。
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
Route::any('foo', function () {
return 'Hello World';
});
3.路由参数
3.1 必选参数
Route::get('user/{id}', function ($id) { return 'User '.$id; }); Route::get('posts/{post}/comments/{com>>>ment}', function ($postId, $commentId) { //可以按需要定义多个路由参数 });
3.2 可选参数
通过在参数后加一个?来标记,如{param?}
3.3.1 正则约束
使用路由实例上的where方法来约束路由参数的格式。
Route::get(‘user/{name}’, function ($name) {
//
})->where(‘name’, ‘[A-Za-z]+’);Route::get(‘user/{id}’, function ($id) {
//
})->where(‘id’, ‘[0-9]+’);Route::get(‘user/{id}/{name}’, function ($id, $name) {
//
})->where([‘id’ => ‘[0-9]+’, ‘name’ => ‘[a-z]+’]);3.3.2 全局约束
在RouteServiceProvider类的boot方法中定义全局约束模式
4 命名路由(方便url生成或者重定向)
$url = route(‘profile’);
$redirect = redirect()->route(‘profile’);
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
5 路由分组
如果你在使用路由分组,可以在路由分组属性数组中指定as关键字来为分组中的路由设置一个共用的路由名前缀Route::group(['as' => 'admin::'], function () { Route::get('dashboard', ['as' => 'dashboard', function () { // 路由被命名为 "admin::dashboard" }]); });
添加路由前缀
属性prefix可以用来为分组中每个给定URI添加一个前缀,比如,你想要为所有路由URIs前面添加前缀admin:Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // 匹配 "/admin/users" URL }); });
6.防止CSRF攻击
{!! csrf_field() !!}
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<?php echo csrf_field(); ?>
从CSRF保护中排除URIs
7. 资源路由
Route::resource(‘role’, ‘RoleController’, [‘as’ => ‘admin’]);
生成路由如下: