问题很简单 - 是否可以以任何智能方式扩展 Laravel 5 功能,或者有时您需要复制大量代码/类才能实现您想要的。
因为它相当广泛,我给你举两个例子。
1) 我想更改 \Illuminate\Routing\ResourceRegistrar
的 edit
和 create
的网址。目前,我发现实现这一目标的唯一方法是:扩展主 Illuminate Application
以传递自己的 RoutingServiceProvider
,然后扩展 Router
,然后扩展 Illuminate\Routing\ResourceRegistrar
最后在 bootstrap/app.php
使用我们的扩展 Application 类。仅仅改变2行就做了很多修改。事实上,许多方法都是重复的,只是为了传递我们的自定义类,其代码完全相同,只是它使用来自其他命名空间的类
2) 其他类似的更改 - 为缓存配置设置自定义路径 - 您需要再次扩展 Application
来覆盖方法 getCachedConfigPath
,然后在 bootstrap 中进行更改/app.php
所以问题是 - 是否需要进行一些修改,或者是否可以通过某种方式更轻松地实现相同的修改(例如上面的 2 个),而不是扩展核心 Application
类并使其如此许多变化?
最佳答案
您应该能够通过将您自己的实现绑定(bind)到服务容器来覆盖核心 ResourceRegistrar
:
$this->app->bind('\Illuminate\Routing\ResourceRegistrar', function()
{
return new MyResourceRegistrar();
});
让MyResourceRegistrar
扩展核心ResourceRegistrar
,您应该能够覆盖edit
和create
方法:
class MyResourceRegistrar extends \Illuminate\Routing\ResourceRegistrar
{
// Overwrite your methods here
}
关于php - 扩展 Laravel 5 核心功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084661/