Dio*_*nça 5 laravel laravel-routing laravel-5
通过在具有中间件本身的组中使用中间件,我遇到了一些问题,如下面的代码:
Route::group(['prefix' => '{lang?}','middleware'=>'language'], function() {
Route::get('/', 'HomeController@index');
Route::get('/login','AuthController@login');
Route::post('/login','AuthController@do_login');
Route::get('/logout','AuthController@logout');
Route::group(['prefix' => 'checkout','middleware'=>'authentication'], function () {
Route::get('/', "CheckoutController@step1");
});
});
Run Code Online (Sandbox Code Playgroud)
而我目前的AuthenticationMiddleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
use Session;
use App;
use Redirect;
class AuthenticationMiddleware{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
die("inside");
if(!User::check())
{
return Redirect::to("/login");
}
else
{
return $next($request);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:所以,他在/ checkout范围之外进入最后一个中间件事件.我怎么能避免呢?谢谢大家
$middleware从您的评论中,我看到您在AND上添加了中间件$routeMiddleware,因此AuthenticationMiddleware将在每个请求上运行。如果您只想让请求传递AuthenticationMiddleware到指定的路由,请将其从 中删除$middleware并仅保留在$routeMiddleware.
从文档中:
如果您希望在应用程序的每个 HTTP 请求期间运行中间件,只需在 app/Http/Kernel.php 类的 $middleware 属性中列出中间件类即可。
和:
如果您想将中间件分配给特定的路由,您应该首先在 app/Http/Kernel.php 文件中为中间件分配一个快捷键。默认情况下,此类的 $routeMiddleware 属性包含 Laravel 中包含的中间件的条目。要添加您自己的键,只需将其附加到此列表中并为其分配您选择的键即可。
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |