2015-07-30 6 views
1

http://laravel.com/docs/5.1/facadesLaravel - переопределить привязки фасадов по умолчанию - как?

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

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

ответ

3

Итак, я сделал это. Сначала я заметил, что эти привязки были жестко закодированы в 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, потому что все это также работает без этого изменения.

0

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

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 со своим собственным провайдером.