Laravel — переопределить привязки фасада по умолчанию — как?

http://laravel.com/docs/5.1/facades

Фасады перечислены на связанной странице внизу. У меня вопрос... Как мне переопределить эти привязки сервисного контейнера?

Например, фасад Request связывает Illuminate\Http\Request с ключом request. Я хочу создать свой собственный класс, который наследуется от Illuminate\Http\Request, и связать его с ключом request вместо текущего класса. И я не могу найти, какой поставщик услуг связывает это.


person morgoth84    schedule 30.07.2015    source источник


Ответы (2)


Так я вроде и сделал. Сначала я заметил, что эти привязки жестко запрограммированы в Illuminate\Foundation\Application::registerCoreContainerAliases(), поэтому я расширил этот класс и переопределил этот метод, чтобы изменить его. Мне также пришлось вызывать этот класс сейчас в bootstrap\app.php, но все это не помогло, я все еще получал экземпляр Illuminate\Http\Request.

Затем я обнаружил, что Illuminate\Http\Request прямо упоминается в public\index.php, поэтому я попытался изменить его там на My\Very\Own\Http\Request, и это сработало, наконец, моя реализация использовалась.

Наконец, я удалил свою версию Application::registedCoreContainerAliases() и восстановил bootstrap\app.php, потому что все работает и без этого изменения.

person morgoth84    schedule 30.07.2015

Я думаю, что следующий ответ был бы очень полезен для вас

https://stackoverflow.com/a/39648307/3912276

Я процитировал самую важную часть ответа. В нем объясняется, как можно заменить/расширить фасад Mailer.

Напишите собственную реализацию Mailer, расширяющую Illuminate\Mail\Mailer, в которой вы можете переопределить метод отправки, реализовать свои проверки и вызвать parent::send(). Напишите свой собственный поставщик услуг (расширение Illuminate\Mail\MailServiceProvider), в частности повторно реализуйте метод регистрации. Он должен создать экземпляр вашего собственного Mailer вместо собственного Laravel. (Вы можете скопировать большую часть кода из метода регистрации Laravel). Теперь в вашем файле config/app.php в массиве провайдеров замените Illuminate\Mail\MailServiceProvider::class на вашего собственного провайдера.

person Mark Walet    schedule 12.09.2017