Architektura wtyczki php

Próbuję wymyślić sposób na stworzenie architektury wtyczki dla mojej własnej struktury. Przeczytałem wiele tematów i opublikowałem tutaj i na innych stronach. I w zasadzie doszedłem do następującego rozwiązania, które wydaje się być jedyną dobrą opcją w PHP (obecnie).

Chodzi o to, że każda klasa rozszerza klasę podobną do obserwatora. Tak więc klasa Template, BaseController itp. Zawsze rozszerza klasę Plugin.

<code>class BaseController extends Plugin
{
    public function __construct()
    {
        // Plugin check, notify all loaded plugins
        $this->checkForEarlyHooks();

        // Init some standard stuff
        $this->view = new Template();
        $this->baseLayout = 'layout.html';

        $this->something = new Something();

        // Plugin check, notify all loaded plugins
        $this->checkForLateHooks();
    }
}
</code>

Tak więc w zasadzie dzieje się tak, że gdy indexController rozszerza kontroler baseControl, sprawdzana jest wtyczka. W tym przypadku dla konstruktora. Może to być wygodne, gdy chcesz wykonać pewien rodzaj sprawdzenia logowania za pomocą wtyczki, zanim faktycznie zostanie wywołana metoda działania.

Klasa wtyczek może rozstrzygać z jakiej klasy została wywołana i wie, jakich funkcji szukać w załadowanych wtyczkach.

Zauważ również, że sprawdza załadowaną listę wtyczek 2 razy. Jeden, zanim cokolwiek zostanie wczytane (wcześnie) w konstruktorze, i jeden, gdy wszystkie vary zostaną załadowane (późno).

Mogę także dodawać zmienne do funkcji „checkForLateHooks ()”. Tak więc funkcje przechwytujące mogą nimi manipulować, tak jak zmienna „baseLayout”.

Funkcja haka wyglądałaby tak:

<code>public function hookConstruct ( &$baseLayout )
{
    $baseLayout = 'login.html';
}
</code>

Teraz zasadniczo moje pytanie brzmi: czy to podejście jest dobre? Wiem, że jest też wiele innych sposobów, aby to zrobić. Ale głównie nie chcę mieć problemów projektowych później. Wydaje się, że to dobry pomysł, ale nigdy nie wiadomo, jak się sprawy potoczą później ...

Jeśli dobrze pamiętam (ze wszystkich postów, które przeczytałem), jest to podobne do WordPressa (i kilku innych frameworków).

questionAnswers(2)

yourAnswerToTheQuestion