【问题标题】:Laravel - override default facade bindings - how?Laravel - 覆盖默认外观绑定 - 如何?
【发布时间】:2015-07-30 08:20:07
【问题描述】:
http://laravel.com/docs/5.1/facades
外墙在底部的链接页面上列出。我的问题是...如何覆盖这些服务容器绑定?
例如,Request 外观将 Illuminate\Http\Request 与键 request 绑定。我想创建自己的类,它继承自Illuminate\Http\Request,并将其与request 键绑定,而不是当前类。而且我找不到哪个服务提供商绑定了这个。
【问题讨论】:
标签:
php
laravel
laravel-5
laravel-facade
【解决方案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,因为在没有此更改的情况下一切正常。
【解决方案2】:
我认为下面的答案对你很有用
https://stackoverflow.com/a/39648307/3912276
我引用了答案中最重要的部分。它解释了如何替换/扩展 Mailer 外观
编写您自己的Mailer 实现,扩展Illuminate\Mail\Mailer,您可以在其中重写发送方法,实现您的检查并调用parent::send()。
编写自己的服务提供者(扩展Illuminate\Mail\MailServiceProvider),特别是重新实现注册方法。它应该创建一个你自己的 Mailer 实例来代替 Laravel 自己的。 (你可以从 Laravel 的 register 方法中复制大部分代码)。
现在,在您的 config/app.php 文件的 providers 数组中,将 Illuminate\Mail\MailServiceProvider::class 替换为您自己的提供程序。