Lumen 6 中文文档 路由
基础路由
你可以在 routes/web.php
中定义路由,其中最基础的路由只需要接受一个简单的 URI 和一个闭包。
$router->get('foo', function () {
return 'Hello World';
});
$router->post('foo', function () {
//
});
可用的路由方法
路由器允许你注册能响应任何 HTTP 请求的路由:
$router->get($uri, $callback);
$router->post($uri, $callback);
$router->put($uri, $callback);
$router->patch($uri, $callback);
$router->delete($uri, $callback);
$router->options($uri, $callback);
路由参数
必填参数
当然,有时需要在路由中捕获一些 URL 片段。例如,从 URL 中捕获用户的 ID,可以通过定义路由参数来执行此操作:
$router->get('user/{id}', function ($id) {
return 'User '.$id;
});
也可以根据需要在路由中定义多个参数:
$router->get('posts/{postId}/comments/{commentId}', function ($postId, $commentId) {
//
});
路由参数通常会包含在 {}
中,当路由被执行时,这些参数将会被传递给路由的闭包。
注意: 路由参数不能包含横线
-
,不过可以包含下划线 (_
)。
可选参数
您可以将路由URI定义的一部分包含在“ […]”中来定义可选的路由参数。例如, /foo[bar]
将匹配 /foo
和 /foobar
。可选参数仅在URI的末尾位置受支持。换句话说,您不能在路径定义的中间放置可选参数。
$router->get('user[/{name}]', function ($name = null) {
return $name;
});
正则表达式约束
您可以通过在路由定义中定义一个正则表达式来限制路由参数的格式:
$router->get('user/{name:[A-Za-z]+}', function ($name) {
//
});
命名路由
命名路由可以方便地生成URL或特定路由的重定向。您可以在定义路由时使用“ as”数组键为路由指定名称:
$router->get('profile', ['as' => 'profile', function () {
//
}]);
您还可以为控制器操作指定路由名称:
$router->get('profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
根据路由别名生成URL
一旦你定义命名路由,就可以根据路由别名生成 URL 或者使用全局函数 route
进行路由重定向。
// 生成 URLs
$url = route('profile');
// 重定向
return redirect()->route('profile');
如果命名路由包含路由参数,就可以将路由参数作为第二个参数传递给全局函数 route
,这些参数将自动的被插入当前 URL 的正确位置。
$router->get('user/{id}/profile', ['as' => 'profile', function ($id) {
//
}]);
$url = route('profile', ['id' => 1]);
路由组
路由组允许子路由共享路由属性,例如中间件、命名空间等。这样所有属于该路由组的子路由都不用单独的设置这些共享属性,共享属性组成一个关联数组,并将这个数组作为第一个参数传递给 $this->group
方法。
我们将通过介绍该功能的几个常见用例,来了解更多关于路由组的用法。
中间件
要给路由组中所有的路由分配中间件,可以在 group 之前调用 middleware
方法,中间件会依照它们在数组中列出的顺序来运行:
$router->group(['middleware' => 'auth'], function () use ($router) {
$router->get('/', function () {
// Uses Auth Middleware
});
$router->get('user/profile', function () {
// Uses Auth Middleware
});
});
命名空间
另一个常见用例是使用 namespace
方法将相同的 PHP 命名空间分配给路由组的中所有的控制器。
$router->group(['namespace' => 'Admin'], function() use ($router)
{
// Using The "App\Http\Controllers\Admin" Namespace...
$router->group(['namespace' => 'User'], function() use ($router) {
// Using The "App\Http\Controllers\Admin\User" Namespace...
});
});
路由前缀
可以用 prefix
方法为路由组中给定的 URL 增加前缀。例如,你可以为组中所有路由的 URI 加上 admin
前缀:
$router->group(['prefix' => 'admin'], function () use ($router) {
$router->get('users', function () {
// Matches The "/admin/users" URL
});
});
您还可以使用 prefix
参数为分组的路由指定通用参数
$router->group(['prefix' => 'accounts/{accountId}'], function () use ($router) {
$router->get('detail', function ($accountId) {
// Matches The "/accounts/{accountId}/detail" URL
});
});
猜你喜欢: