php laravel中auth自动生成的登录页源码有一处不懂(中间件)
我用 php artisan make:auth生成了一个登录注册的模块
我分析源码的时候 发现 app\Http\Controllers\Auth\LoginController.php内存在这样一段代码:
public function __construct() { $this->middleware('guest', ['except' => 'logout']); }我看到$this->middleware代码后先是一愣... 后来在网上找到资料原来这是使用了一个中间件
但我对后面的['except' => 'logout']); 实在不懂,寻求大神给予讲解一下。
另外:except是源码里自己定义的 还是laravel自带的? |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
这个是laravel框架里面自带的,中间件就是控制用户是否能访问的一种机制。
在文件vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php 77行
/***Determineifthegivenoptionsexcludeaparticularmethod.**@paramstring$method*@paramarray$options*@returnbool*/protectedstaticfunctionmethodExcludedByOptions($method,array$options){return(isset($options['only'])&&!in_array($method,(array)$options['only']))||(!empty($options['except'])&&in_array($method,(array)$options['except']));}
- 在Controller设置中间件的时候可以设置:only针对某个方法添加中间件,或者except除了这个方法之外的方法都添加中间件
methodExcludedByOptions 方法是判断是否在这个方法中使用中间件,返回值是布尔值 true使用中间件,false不使用中间件
排除特定的方法不使用中间件
$this->middleware('guest:admin',['except'=>'login']);在指定的方法中使用中间件
$this->middleware('guest:admin',['except'=>'logout']);推荐将中间件写在路由中
Route::get('logout','AuthController@logout')->middleware('auth:admin'); |
|
|
|
|