【问题标题】:Extending core Laravel 5 functionality扩展核心 Laravel 5 功能
【发布时间】:2015-03-16 18:48:21
【问题描述】:

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

因为范围很广,我给你举两个例子。

1) 我想将editcreate 的网址更改为\Illuminate\Routing\ResourceRegistrar。目前我发现实现这一点的唯一方法是:扩展主 Illuminate Application 以传递自己的 RoutingServiceProvider,然后扩展 Router,然后扩展 Illuminate\Routing\ResourceRegistrar,最后在 bootstrap/app.php 中使用我们扩展的 Application 类。相当多的修改只是为了改变 2 行。许多方法实际上是重复的,只是为了传递我们的自定义类,其中代码完全相同,只是它使用来自其他命名空间的类

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

所以问题是 - 是否需要进行一些修改或者可能相同的方式(例如上面的 2 个)可以以某种方式更容易地实现而不扩展核心 Application 类并进行如此多的更改?

【问题讨论】:

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

标签: php laravel laravel-5


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 2013-07-01
    • 2013-12-29
    • 2023-03-12
    • 1970-01-01
    • 2015-10-17
    • 2020-07-02
    • 2017-03-22
    相关资源
    最近更新 更多