在Laravel 5.2.31及更高版本的changes之后,app/Http/routes.php
中的所有路由都属于Web中间件组。
在RouteServiceProvider.php
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
问题:
web
中间件的情况下定义路由集的最简单/最佳方法是什么? 其中一个用例是,声明无状态api的路由没有会话中间件属于Web组中间件
答案 0 :(得分:7)
我解决这个问题的一种方法是编辑app/Providers/RouteServiceProvider.php
并为其他组中间件提供另一个路径文件,即api
public function map(Router $router)
{
$this->mapWebRoutes($router);
$this->mapApiRoutes($router);
//
}
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
// Add this method and call it in map method.
protected function mapApiRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'api',
], function ($router) {
require app_path('Http/routes-api.php');
});
}
要验证结果,请在终端上运行php artisan route:list
并检查路由中间件。
例如:
现在我有一些没有Web中间件的路由,这些中间件在不同的文件中定义,稍后在RouteServiceProvider中调用
或
如果您更喜欢旧功能,可以使用以下内容:
public function map(Router $router)
{
$this->mapWebRoutes($router);
$this->mapGeneralRoutes($router);
}
protected function mapGeneralRoutes(Router $router)
{
$router->group(['namespace' => $this->namespace], function ($router) {
require app_path('Http/routes-general.php');
});
}
然后,在routes-general.php
中,您可以像以前一样为不同的路由集创建多个中间件组