Laravel 4 - Construtor pai de chamada de construtor filho com injeção de dependência
Estou construindo um CMS usando o Laravel 4 e tenho um controlador de administração base para as páginas de administração que se parece com isso:
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;
}
}
Estou usando o contêiner IOC do Laravel para injetar as dependências de classe no construtor. Eu então tenho várias classes de controlador que controlam os diferentes módulos que compõem o CMS e cada classe estende a classe admin. Por exemplo:
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'));
}
}
Agora isso funciona perfeitamente, no entanto, meu problema, que é um problema menor e mais eficiente, ocorre quando eu adiciono um construtor aoUsersController
classe. Por exemplo:
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'));
}
}
Como a classe filha agora tem um construtor, isso significa que o construtor do pai não está sendo chamado e, assim, as coisas das quais a classe filha é dependente, comothis->user
não são mais válidos, causando erros. Eu posso chamar a função de construção do controlador de administração viaparent::__construct()
no entanto, como preciso passar as dependências de classe, preciso configurar essas dependências no construtor filho, resultando em algo parecido com isto:
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
}
Agora isso funciona bem em termos de funcionalidade; no entanto, não parece muito eficiente ter que incluir as dependências do pai em cada classe filha que tenha um construtor. Também parece bastante confuso. O Laravel fornece uma maneira de contornar isso, ou o PHP suporta uma maneira de chamar o construtor pai e filho sem precisar chamarparent::__construct()
da criança?
Eu sei que esta é uma pergunta longa para o que efetivamente não é um problema, mas mais eu apenas me preocupo com eficiência, mas eu aprecio quaisquer ideias e / ou soluções.
Desde já, obrigado!