Расширение функциональности ядра Laravel 5

Вопрос довольно прост - возможно ли расширить функциональность Laravel 5 любым умным способом или вам нужно иногда копировать много кода/классов, чтобы достичь того, чего вы хотите.

Поскольку он довольно широк, я приведу вам два примера.

1) Я хотел бы изменить URL-адреса для edit и create для \Illuminate\Routing\ResourceRegistrar. На данный момент единственным способом, который я нашел для этого, является: расширение основного Illuminate Application для передачи собственного RoutingServiceProvider, затем расширение Router, затем расширение Illuminate\Routing\ResourceRegistrar и, наконец, в bootstrap/app.php использовать наш расширенный класс Application. Довольно много изменений только для изменения 2 строк. На самом деле многие методы дублируются только для того, чтобы передать наш пользовательский класс, какой код точно такой же, за исключением того, что он использует класс из другого пространства имен

2) Другие подобные изменения - задайте настраиваемые пути для кэшированного config - вам нужно снова расширить Application, чтобы переопределить метод getCachedConfigPath, а затем внести изменения в bootstrap/app.php

Итак, вопрос в том, что нужно сделать некоторые модификации или, возможно, одно и то же (например, те, что указаны выше), как-то проще не расширять класс Application и сделать так много изменений?

Ответ 1

Вы можете перезаписать ядро ​​ ResourceRegistrar, привязав свою собственную реализацию к контейнеру службы:

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

Пусть MyResourceRegistrar расширяет ядро ​​ ResourceRegistrar, и вы должны иметь возможность перезаписывать методы edit и create:

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