Laravel 4 - Untergeordneter Konstruktor Ruft den übergeordneten Konstruktor mit Abhängigkeitsinjektion auf

Ich erstelle ein CMS mit Laravel 4 und habe einen Basis-Admin-Controller für die Admin-Seiten, der ungefähr so ​​aussieht:

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;
    }
}

Ich verwende Laravels IOC-Container, um die Klassenabhängigkeiten in den Konstruktor einzufügen. Ich habe dann verschiedene Controller-Klassen, die die verschiedenen Module steuern, aus denen das CMS besteht, und jede Klasse erweitert die Admin-Klasse. Zum Beispiel:

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'));
    }
}

Jetzt funktioniert das einwandfrei, aber mein Problem, das weniger ein Problem als ein Effizienzproblem ist, tritt auf, wenn ich dem einen Konstruktor hinzufügeUsersController Klasse. Zum Beispiel:

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'));
    }
}

Da die untergeordnete Klasse jetzt über einen Konstruktor verfügt, bedeutet dies, dass der Konstruktor der übergeordneten Klasse nicht aufgerufen wird und daher Dinge, von denen die untergeordnete Klasse abhängig ist, zthis->user sind nicht mehr gültig und verursachen Fehler. Ich kann die Konstruktfunktion des Admin-Controllers über aufrufenparent::__construct() Da ich jedoch die Klassenabhängigkeiten übergeben muss, muss ich diese Abhängigkeiten im untergeordneten Konstruktor festlegen, was ungefähr so ​​aussieht:

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
}

Nun funktioniert dies gut in Bezug auf seine Funktionalität; Es scheint mir jedoch nicht sehr effizient zu sein, die Abhängigkeiten der Eltern in jede untergeordnete Klasse einzubeziehen, die einen Konstruktor hat. Es sieht auch ziemlich chaotisch aus. Bietet Laravel eine Möglichkeit, dies zu umgehen, oder unterstützt PHP eine Möglichkeit, sowohl den übergeordneten als auch den untergeordneten Konstruktor aufzurufen, ohne aufrufen zu müssenparent::__construct() vom kind?

Ich weiß, dass dies eine lange Frage ist, denn es handelt sich eigentlich nicht um ein Problem, sondern vielmehr um Effizienz, aber ich schätze Ideen und / oder Lösungen.

Danke im Voraus!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage