Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 禁用每个路由的web中间件::组_Laravel_Routes_Middleware - Fatal编程技术网

Laravel 禁用每个路由的web中间件::组

Laravel 禁用每个路由的web中间件::组,laravel,routes,middleware,Laravel,Routes,Middleware,在Laravel 5.2中,默认情况下,所有路由都包含web中间件。但是,我希望对Api路由组中的所有路由禁用此中间件,而不必在每个控制器中指定忽略web中间件 我不希望同时删除中间件,因为这是一个混合应用程序,服务于这两种类型的客户端,仍然需要xsrf检查。有没有办法忽略或“排除”每个路由组的中间件?我的方法 您可以将路由文件分离到另一个文件中。检查RouteServiceProviderclass。在map方法中,添加另一行: public function map(Router $rout

在Laravel 5.2中,默认情况下,所有路由都包含web中间件。但是,我希望对Api路由组中的所有路由禁用此中间件,而不必在每个控制器中指定忽略web中间件

我不希望同时删除中间件,因为这是一个混合应用程序,服务于这两种类型的客户端,仍然需要xsrf检查。有没有办法忽略或“排除”每个路由组的中间件?

我的方法 您可以将
路由
文件分离到另一个文件中。检查
RouteServiceProvider
class。在
map
方法中,添加另一行:

public function map(Router $router)
{
    $this->mapWebRoutes($router);

    // This method will register your routes which doesn't need 'web' middleware 
    $this->mapNoMiddlewareRoutes($router);
}
然后添加
mapNoMiddlewareRoutes
方法:

protected function mapNoMiddlewareRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace,
    ], function ($router) {
        require app_path('Http/no_middleware_routes.php');
    });
}
}

最后,在
app/Http
文件夹中添加
no\u middleware\u routes.php
文件

Route::get('/foo', function () {
    return ['foo' => 'bar'];
});
第二种方法 根据文章,您可以使用除属性之外的

// app/Http/Middleware/VerifyCsrfToken.php

protected $except = [
    'webhook/*'
];
从示例中可以看到,可以使用通配符进行路由匹配,也可以单独定义每个通配符。在内部,这个数组是通过$request->is运行的,您可以在requests文档中找到关于它的更多详细信息


阅读更多文档

,因为Laravel 7.7您可以使用
排除的中间件
属性,例如:

Route::group([
'前缀'=>'忘记密码',
“已排除的_中间件”=>['auth'],
],函数(){
路线::post('发送电子邮件','ForgotPasswordController@sendEmail');
路由::post('save-new-password','ForgotPasswordController@saveNewPassword');
});

这看起来会起作用……我现在会尝试一下,但可能会考虑覆盖路由中间件加载程序,以提供一个“except”方法,考虑到它存在于控制器中间件中,我认为该方法已经存在。请参见此