Laravel 4 - 子构造函数调用具有依赖注入的父构造函数
我正在使用Laravel 4构建一个CMS,并且我有一个用于管理页面的基本管理控制器,如下所示:
class AdminController extends BaseController {
public function __construct(UserAuthInterface $auth, MessagesInterface $message, ModuleManagerInterface $module)
{
$this->auth = $auth;
$this->user = $this->auth->adminLoggedIn();
$this->message = $message;
$this->module = $module;
}
}
我使用Laravel的IOC容器将类依赖项注入构造函数。然后,我有各种控制器类来控制组成CMS的不同模块,并且每个类都扩展了管理类。例如:
class UsersController extends AdminController {
public function home()
{
if (!$this->user)
{
return Redirect::route('admin.login');
}
$messages = $this->message->getMessages();
return View::make('users::home', compact('messages'));
}
}
现在这很完美,但是当我向类中添加构造函数时,我的问题(不是问题,而是效率问题)就会发生。例如:UsersController
class UsersController extends AdminController {
public function __construct(UsersManager $user)
{
$this->users = $users;
}
public function home()
{
if (!$this->user)
{
return Redirect::route('admin.login');
}
$messages = $this->message->getMessages();
return View::make('users::home', compact('messages'));
}
}
由于子类现在具有构造函数,这意味着父类的构造函数未被调用,因此子类所依赖的内容(例如不再有效)会导致错误。我可以通过调用管理控制器的构造函数,但是由于我需要向它传递类依赖项,因此我需要在子构造函数中设置这些依赖项,从而产生如下所示的内容:this->user
parent::__construct()
class UsersController extends AdminController {
public function __construct(UsersManager $user, UserAuthInterface $auth, MessagesInterface $message, ModuleManagerInterface $module)
{
parent::__construct($auth, $messages, $module);
$this->users = $users;
}
// Same as before
}
现在,就其功能而言,这工作正常;但是,对我来说,必须在每个具有构造函数的子类中包含父级的依赖项似乎不是很有效。它看起来也很乱。Laravel是否提供了解决此问题的方法,或者PHP是否支持一种调用父构造函数和子构造函数而无需从子构造函数调用的方法?parent::__construct()
我知道这是一个很长的问题,实际上不是问题,但更多的我只是对效率的强迫症,但我欣赏任何想法和/或解决方案。
提前致谢!