扩展核心Laravel 5功能

Mar*_*łek 12 php laravel laravel-5

问题很简单 - 是否可以以任何智能方式扩展Laravel 5功能,或者你需要复制很多代码/类只是为了实现你想要的.

因为它相当广泛,我会举两个例子.

1)我想更改URL editcreatefor \Illuminate\Routing\ResourceRegistrar.目前,我发现实现这一目标的唯一方法是:扩展主要的Illuminate Application以传递自己RoutingServiceProvider,然后扩展Router,然后扩展Illuminate\Routing\ResourceRegistrar并最终bootstrap/app.php使用我们的扩展Application类.相当多的修改只是为了改变2行.事实上,许多方法都是重复的,只是为了传递我们的自定义类,除了使用其他命名空间中的类之外,哪些代码完全相同

2)其他类似的更改 - 为缓存配置设置自定义路径 - 您需要再次扩展 Application到覆盖方法getCachedConfigPath,然后进行更改bootstrap/app.php

所以问题是 - 是否需要进行某些修改或者可能相同(例如上面的那些)可以实现更方便的扩展核心Application类并进行如此多的更改?

小智 6

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

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

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

class MyResourceRegistrar extends \Illuminate\Routing\ResourceRegistrar
{
    // Overwrite your methods here
}
Run Code Online (Sandbox Code Playgroud)