Laravel 路由

基础路由

路由定义文件

/*
app/Http/routes.php 被 App\Providers\RouteServiceProvider 加载
*/
Route::get('/', function () {
    return 'Hello World';
});

定义多个路由动词

Route::match(['get', 'post'], '/', function () {
    return 'Hello World';
});

定义所有动词

Route::any('foo', function () {
     	return 'Hello World';
 });

路由参数

路由参数不能包含 '-'

必要参数
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
多参数
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

可选参数

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

正则表达式约束

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]+']);




全局限制

/*
可以在App\Providers\RouteServiceProvider 的boot方法中定义全局正则表达式限制。
*/
public function boot(Router $router)
{
    $router->pattern('id', '[0-9]+');

    parent::boot($router);
}

路由命名

路由命名可以让我们在使用route函数生成指向该路由的URL或者生成跳转到该路由的重定向链接时更加方便

//使用as数组指定路由
Route::get('user/profile', ['as' => 'profile', function () {
    //
}]);
 //uses制定控制器
Route::get('user/profile', [
    'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
//也可使用name方法
Route::get('user/profile', 'UserController@showProfile')->name('profile');


路由组和命令路由

如果使用路由组,则可以在路由组属性数组中指定as关键字,允许为组内的所有路由设置公共路由名前缀
Route::group(['as' => 'admin::'], function () {
    Route::get('dashboard', ['as' => 'dashboard', function () {
        // Route named "admin::dashboard"
    }]);
});


生产URL到命名路由

一旦给一个给定的路由指定了一个名字,可以通过路由功能生成URL或重定向时使用路由名称

$url = route('profile');
$redirect = redirect()->route('profile');

如果路由定义参数,则可以将参数作为第二个参数传递给路由方法。给定的参数将自动插入到URL中
Route::get('user/{id}/profile', ['as' => 'profile', function ($id) {
    //
}]);
$url = route('profile', ['id' => 1]);

路由组

路由组允许在大量路由之间共享路由属性,例如中间件或命名空间,而无需在每个单独的路由上定义这些属性。 共享属性以数组格式指定为Route :: group方法的第一个参数

中间件

要将中间件分配给组内的所有路由,可以使用组属性数组中的中间件密钥。中间件将按照定义此数组的顺序执行
Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // Uses Auth Middleware }); Route::get('user/profile', function () { // Uses Auth Middleware });});


命名空间

Route::group(['namespace' => 'Admin'], function()
{
    // Controllers Within The "App\Http\Controllers\Admin" Namespace

    Route::group(['namespace' => 'User'], function()
    {
        // Controllers Within The "App\Http\Controllers\Admin\User" Namespace
    });
});


子域路由

Route::group(['domain' => '{account}.myapp.com'], function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});


路由前缀

.。。。未完待续




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值