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

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

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

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

1

Решение

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

3

Другие решения

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

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, с вашим собственным поставщиком.

0

По вопросам рекламы [email protected]