扩展核心Laravel 5功能

时间:2015-03-16 18:48:21

标签: php laravel laravel-5

问题很简单 - 是否可以以任何智能方式扩展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类并进行如此多的更改?

1 个答案:

答案 0 :(得分:6)

您应该能够通过将自己的实现绑定到服务容器来覆盖核心ResourceRegistrar

$this->app->bind('\Illuminate\Routing\ResourceRegistrar', function()
{
    return new MyResourceRegistrar();
});

MyResourceRegistrar扩展核心ResourceRegistrar,您应该能够覆盖editcreate方法:

class MyResourceRegistrar extends \Illuminate\Routing\ResourceRegistrar
{
    // Overwrite your methods here
}