这是来自laravel内置RegisterController的代码段。
public function __construct(){
$this->middleware('guest'); //What does it actually do?
}
middleware
控制器构造函数,但我需要知道什么
$this->middleware('guest')
实际上是在做什么以及什么参数(在哪里
?)设置。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']),
]);
}
}
答案 0 :(得分:1)
1)在控制器的构造函数中调用的$this->middleware(...)
仅将...
中的值添加到控制器上名为middleware
的数组中。就在那个时候。在这一点上什么都没有“跑”。您可以在控制器从Illuminate\Routing\Controller
扩展的控制器中看到此功能。
稍后,当路由器需要调度请求时,它将通过收集中间件来构建中间件堆栈,以通过该中间件堆栈,该中间件包括通过middleware
向控制器的实例询问其定义的getMiddleware
。
public function getMiddleware()
{
return $this->middleware;
}
2)特性包括控制器中的功能和变量。在控制器上有指向这些方法中某些方法的路由。
您可以将所有代码粘贴到您的控制器中,基本上是同一回事。
如果您需要更改该控制器的任何功能或对其进行自定义,您将最终重新定义其中一些方法或调整变量。