Laravel - 覆盖默认外观绑定 - 如何?

时间:2015-07-30 08:20:08

标签: php laravel laravel-5 laravel-facade

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

外观列在底部的链接页面上。我的问题是......如何覆盖这些服务容器绑定?

示例,Request外观使用键Illuminate\Http\Request绑定request。我想创建自己的类,它继承自Illuminate\Http\Request并将其与request键绑定,而不是当前类。我无法找到哪个服务提供商绑定它。

2 个答案:

答案 0 :(得分: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,因为一切都在没有这种变化的情况下正常运行。

答案 1 :(得分:0)

我认为以下答案对您非常有用

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

我引用了答案中最重要的部分。它解释了如何替换/扩展Mailer门面

  

编写自己的Mailer实现,扩展Illuminate\Mail\Mailer,您可以在其中覆盖send方法,实施检查并调用parent::send()。   编写自己的服务提供者(扩展Illuminate\Mail\MailServiceProvider),特别是重新实现注册方法。它应该创建一个自己的Mailer实例来代替Laravel自己的实例。 (您可以从Laravel的寄存器方法复制大部分代码)。   现在,在您的config/app.php文件的提供者数组中,将Illuminate\Mail\MailServiceProvider::class替换为您自己的提供商。