在控制器的构造函数中指定中间件

时间:2018-07-25 23:04:36

标签: laravel authentication namespaces

这是来自laravel内置RegisterController的代码段。

public function __construct(){

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

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

类RegisterController扩展了Controller {

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']),
    ]);
}

}

1 个答案:

答案 0 :(得分:1)

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

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

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

2)特性包括控制器中的功能和变量。在控制器上有指向这些方法中某些方法的路由。

您可以将所有代码粘贴到您的控制器中,基本上是同一回事。

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