【问题标题】:Specifying Middleware Within Controller's Constructor在控制器的构造函数中指定中间件
【发布时间】:2019-01-02 20:36:55
【问题描述】:

这是来自 laravel 内置 RegisterController 的代码 sn-p。

public function __construct(){

        $this->middleware('guest'); //What does it actually do?

}
  1. 我知道在 控制器构造函数,但我需要知道什么 $this->middleware('guest') 实际上做了什么参数(在哪里 ?) 它设置了。
  2. 第二个问题:在同一个控制器 (RegisterController) 中,我们 use RegisterUser(在命名空间 Illuminate\Foundation\Auth 中定义)但似乎我们从未在整个控制器中使用它(覆盖方法或属性)。我有点困惑。提前致谢!

类 RegisterController 扩展控制器 {

use RegistersUsers; //?????

/**
 * Where to redirect users after registration.
 *
 * @var string
 */
protected $redirectTo = '/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest');
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

}

【问题讨论】:

    标签: laravel authentication namespaces


    【解决方案1】:

    1) 在控制器的构造函数中调用的$this->middleware(...) 只是将... 中的值添加到控制器上名为middleware 的数组中。那时就是这样。在那一点上没有什么是“跑”的。您可以在控制器扩展的控制器中看到此功能,Illuminate\Routing\Controller

    稍后,当路由器需要分派请求时,它将构建一个中间件堆栈以通过收集中间件来传递请求,其中包括通过getMiddleware 向控制器实例询问其定义的middleware

    public function getMiddleware()
    {
        return $this->middleware;
    }
    

    2) 特征是将功能和变量包含在控制器中。有路由指向控制器上的其中一些方法。

    你可以把所有的代码粘贴到你的控制器中,基本上是一样的。

    如果您需要更改该控制器的任何功能或对其进行自定义,您最终将重新定义其中一些方法或调整变量。

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多