Mar*_*łek 12 php laravel laravel-5
问题很简单 - 是否可以以任何智能方式扩展Laravel 5功能,或者你需要复制很多代码/类只是为了实现你想要的.
因为它相当广泛,我会举两个例子.
1)我想更改URL edit和createfor \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,你应该能够覆盖edit和create方法:
class MyResourceRegistrar extends \Illuminate\Routing\ResourceRegistrar
{
// Overwrite your methods here
}
Run Code Online (Sandbox Code Playgroud)