http://laravel.com/docs/5.1/facades
外观列在底部的链接页面上。我的问题是......如何覆盖这些服务容器绑定?
示例,Request
外观使用键Illuminate\Http\Request
绑定request
。我想创建自己的类,它继承自Illuminate\Http\Request
并将其与request
键绑定,而不是当前类。我无法找到哪个服务提供商绑定它。
答案 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
替换为您自己的提供商。