Fed*_*zio 11 php laravel-routing laravel-5 laravel-middleware
我有两个中间件:beforeCache和afterCache,两者都在Kernel上注册.
我想按顺序将它们称为路由:1.beforeCache 2. myController 3. afterCache
如果我定义这样的路线:
Route::get('especies/{id}', [
'middleware' => 'beforeCache',
'uses' => 'MyController@myMethod',
'middleware' => 'afterCache',
]);
Run Code Online (Sandbox Code Playgroud)
beforeCache不执行,因为afterCache重新定义了相同的数组键中间件.
我该怎么办?谢谢!
Sie*_*bah 18
我假设你在使用5.1,但你正在做的主要是尝试在路由上定义一个属性数组.方括号[]只是说数组(...)的简写版本.
从文档(http://laravel.com/docs/5.1/middleware#defining-middleware)特别是前/后中间件,您只需要以某种方式返回.
对于Before中间件,您可以执行代码并在代码执行后返回下一个请求.
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
对于After middleware,您可以处理剩余的请求,然后执行代码并最终返回响应.
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
Run Code Online (Sandbox Code Playgroud)
这条路线看起来像这样,
Route::get('especies/{id}',[
'middleware' => [
'beforeCache',
'afterCache'
],
'uses' => 'MyController@myMethod'
]);
Run Code Online (Sandbox Code Playgroud)
小智 6
class BeforeMiddleware implements Middleware {
public function handle($request, Closure $next)
{
// Do Stuff
return $next($request);
}
}
class AfterMiddleware implements Middleware {
public function handle($request, Closure $next)
{
$response = $next($request);
// Do stuff
return $response;
}
}
Run Code Online (Sandbox Code Playgroud)
1-before 中间件运行,然后传递请求。
2-after中间件允许对请求进行处理,然后对其进行操作