Laravel под капотом — Фасады
Статья предоставляет подробное руководство по системе фасадов в Laravel, фокусируясь на ее работе под капотом. Начинается с изучения базового примера в приложении Laravel, анализируя код в файле web.php и обнаружив, что у класса Route нет метода get(), возникает вопрос о том, как работает маршрутизатор Laravel.
Исследование приводит к классу Facade, который выступает в роли родительского класса для фасадов в Laravel. Ключевым методом здесь является __callStatic(), магическим методом, вызываемым при вызове неопределенного статического метода на фасаде. Этот метод динамически разрешает экземпляр фасада, вызывая resolveFacadeInstance(), который, в свою очередь, использует метод getFacadeRoot() для получения фактического экземпляра класса.
Метод getFacadeRoot() полагается на метод getFacadeAccessor() в дочернем классе фасада (в данном случае Route), который возвращает строку, представляющую ключ для разрешения экземпляра класса из контейнера приложения. Контейнер приложения устанавливается во время процесса старта, где ключевую роль играет класс Kernel Laravel.
Затем объясняется, как создать пользовательский фасад, привязав класс к контейнеру приложения и создавая класс фасада, указывающий соответствующую строку в getFacadeAccessor(). Процесс иллюстрируется с использованием класса HelloWorld.
Кроме того, представляется концепция фасадов в реальном времени, позволяющая использовать фасады без явного их создания. Это достигается добавлением префикса Facades к пространству имен контроллеров, что вызывает динамическое создание фасада в процессе старта приложения.
Post #4045
3.07K
- 👍 8
- 🥱 3
- ❤ 2