问题很简单 - 是否可以以任何智能方式扩展Laravel 5功能,或者你需要复制很多代码/类只是为了达到你想要的目的。
因为它非常广泛,我会举两个例子。
1)我想为edit
更改create
和\Illuminate\Routing\ResourceRegistrar
的网址。目前我发现实现这一目标的唯一方法是:扩展主要照明Application
以传递自己的RoutingServiceProvider
,然后扩展Router
,然后扩展Illuminate\Routing\ResourceRegistrar
,最后扩展到{{} 1}}使用我们的扩展Application类。相当多的修改只是为了改变2行。事实上,许多方法都是重复的,只是为了传递我们的自定义类,除了使用来自其他命名空间的类之外,代码完全相同
2)其他类似更改 - 为缓存配置设置自定义路径 - 您需要再次展开bootstrap/app.php
以覆盖方法Application
,然后在getCachedConfigPath
所以问题是 - 是否需要进行某些修改或者可能相同(例如上面的那些2)可以更容易地扩展核心bootstrap/app.php
类并进行如此多的更改?
答案 0 :(得分:6)
您应该能够通过将自己的实现绑定到服务容器来覆盖核心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
}