Laravel 中间件。最有效的方式

Eva*_*kus 5 php middleware laravel laravel-5

目前我正在使用 laravel 5 项目,其中包含约 100 个帖子和获取路线。我试图在这里添加中间件,但这个项目背后的逻辑真的很复杂。中间件将在这里发挥非常重要的作用。在我使用组之前,例如:

Route::group(['middleware' => 'auth'], function(){
      //routes
});
Run Code Online (Sandbox Code Playgroud)

但是一切都变得非常混乱,因为我必须在组中创建组,例如:

 Route::group(['middleware' => 'auth'], function(){
          Route::group(['middleware' => 'status'], function(){
               //routes
          });
    });
Run Code Online (Sandbox Code Playgroud)

目前我有 20 个控制器,所以每个控制器包含大约 5 个路由。您能否建议我在大型项目中使用中间件的更有效方法。你用什么方法?提前致谢!

jed*_*ylo 2

这完全取决于您需要将哪些中间件应用于不同的路由。

如果您有共享相同中间件集的多组路由,那么最简单的方法就是在第一个示例中执行的操作:

Route::group(['middleware' => 'auth'], function(){
  //routes
});
Run Code Online (Sandbox Code Playgroud)

如果您有一些共享通用中间件的根,但每个根都可能应用了一些特定的中间件,那么像第二个示例中那样将路由和路由组嵌套到现有组中是一种方法:

Route::group(['middleware' => 'auth'], function(){
      Route::group(['middleware' => 'status'], function(){
           //routes
      });
      Route::get('/uri/', ['middleware' => 'some_other_middleware']);
});
Run Code Online (Sandbox Code Playgroud)

最后,当不同的路由具有不同的中间件集并且您无法以任何方式对它们进行分组时,您需要为每个路由应用一组中间件:

      Route::get('/uri1/', ['middleware' => 'some_middleware']);
      Route::get('/uri2/', ['middleware' => 'some_other_middleware']);
Run Code Online (Sandbox Code Playgroud)

长话短说 - 如果您对哪些中间件应用于哪些路由有复杂的规则,那么在paths.php文件中设置它将会反映复杂性。

您在中间件中执行的某些操作可能应该属于应用程序中的其他层,并且将逻辑移至那里可以简化routes.php,但这完全取决于您拥有的路由和中间件。