【发布时间】:2014-11-22 18:10:19
【问题描述】:
我之前所做的是使用构造函数只注入我的模型并为 Laravel 提供的类使用 Facades,即Session、Auth、 Validator 等,例如。 如果我通过构造注入每个类(我的或 Laravel 的)并通过 $this->.. 语法使用它,或者 我应该使用构造函数注入我自己的类,这会是一个好主意吗? strong> 并为 Laravel 提供的任何东西使用 Facades?
更具体地说,这是我的控制器通常的样子:
class MyController extends BaseController
{
public function __construct( User $user, Bookmark $bookmark ) {
$this->user = $user;
$this->bookmark = $bookmark
}
public function foobar ( ) {
$user_id = Input::get('bar');
...
Session::get('someInfo');
...
return Redirect::to('/');
}
...
}
我应该像下面这样构造我的方法吗?
class MyController extends BaseController
{
public function __construct( User $user, Bookmark $bookmark, Input $input, Session $session, Redirect $redirect ) {
$this->user = $user;
$this->bookmark = $bookmark
$this->input = $input;
$this->session = $session;
$this->redirect = $redirect;
}
public function foobar ( ) {
$user_id = $this->input->get('bar');
...
$this->session->get('someInfo');
...
return $this->redirect->to('/');
}
...
}
【问题讨论】:
-
这个问题似乎离题了,因为它应该在programmers.stackexchange.com上
-
你知道为什么你应该注入对象而不是使用 Laravel 的门面吗?
-
@FlorianMargaine ,应该是 "facades"。
-
我认为这样做取决于您对 IOC 绑定的看法。如果该对象将在所有/大多数控制器方法中使用,则传递给构造是有意义的。示例可能是:元(标题、描述等)。然后,您将在其他地方添加您的绑定如果另一方面您只是在整个应用程序中稀疏地使用一个类,那么外观更有意义。示例:验证器、会话、重定向。 (在控制器方法的上下文中)
标签: php laravel laravel-facade