Php 扩展核心Laravel 5功能

Php 扩展核心Laravel 5功能,php,laravel,laravel-5,Php,Laravel,Laravel 5,问题很简单-是否可以以任何智能方式扩展Laravel 5功能,或者您有时需要复制大量代码/类来实现您想要的功能 因为它相当广泛,我给你举两个例子 1) 我想更改编辑的URL和创建的\illumb\Routing\ResourceRegister。目前,我发现实现这一目标的唯一方法是:扩展main-illumbApplication来传递自己的RoutingServiceProvider,然后扩展Router,然后扩展illumb\Routing\resourceRegistrator,最后在bo

问题很简单-是否可以以任何智能方式扩展Laravel 5功能,或者您有时需要复制大量代码/类来实现您想要的功能

因为它相当广泛,我给你举两个例子

1) 我想更改
编辑
的URL和
创建
\illumb\Routing\ResourceRegister
。目前,我发现实现这一目标的唯一方法是:扩展main-illumb
Application
来传递自己的
RoutingServiceProvider
,然后扩展
Router
,然后扩展
illumb\Routing\resourceRegistrator
,最后在
bootstrap/app.php
中使用我们的扩展应用程序类。只需更改两行就可以进行大量修改。事实上,许多方法只是为了传递我们的自定义类而被复制,这些自定义类的代码完全相同,只是它使用了来自其他命名空间的类

2) 其他类似更改-为缓存配置设置自定义路径-您需要再次扩展
应用程序
以覆盖方法
getCachedConfigPath
,然后在
bootstrap/app.php


所以问题是-是需要做一些修改的方式还是相同的方式(例如上面的2个)如果不扩展core
应用程序
类并进行如此多的更改,可以更轻松地实现吗?

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

$this->app->bind('\Illuminate\Routing\ResourceRegistrar', function()
{
    return new MyResourceRegistrar();
});
myResourceRegister
扩展核心
ResourceRegister
,您应该能够覆盖
编辑
创建
方法:

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

我认为,如果您要定制/扩展Laravel那么多,那么Laravel可能不是您的框架,或者可能是Laravel需要的新功能或修复。您是否考虑过使用Laravel和Symfony软件包构建自己的引导程序?我不同意@astroanu的观点-我不认为想要在这里调整一些东西,并且有足够的理由抛弃整个框架以及它提供给您的所有其他东西。没有一个框架可以对所有人都适用,所以我认为可以根据需要在这里或那里进行一些更改。只需确保您清楚地记录了这些内容,以便熟悉Laravel“开箱即用”的未来开发人员能够理解您与规范的不同之处。@JordanLev阅读了我的评论并注意到“如果您要定制/扩展Laravel那么多”@astroanu我想我们原则上同意,但在划分界限方面有所不同。对我来说,OP想要做的并不是那么多。。。它只是在路由器中更改编辑和创建方法的URL,并为缓存的配置文件设置一些自定义路径。相对于拉威尔的整体架构来说,这些似乎是非常小的调整,所以我不认为它真的“那么大”为了保证扔掉整个框架。可以跳过一个步骤,在
bootstrap/app.php
中重新注册扩展的
RoutingServiceProvider
,而不是修改
应用程序
类。