我正在使用 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()
从子构造函数调用的方法?
我知道这是一个很长的问题,实际上什么不是问题,但更多的是我只是对效率很感兴趣,但我很欣赏任何想法和/或解决方案。
提前致谢!