Laravel 5.5中用于扩展(或覆盖)主应用程序外部的控制器并且基本上不重写应用程序中包的前端的约定是什么?
我有一个包含自己的路由和控制器的包 . 我遇到了一些情况,其中覆盖其中一个控制器中的方法将是解决问题的一种优雅方式;但是,我自己来的解决方案似乎并不理想 . 这似乎不是我经常需要的东西,因为这些包装本身很好 .
Considered solutions provided by request
选项1:我认为这将是一种相对干净的方式,但如果将来路由更新可能会导致问题,我必须监控它并确保手动更新我修改后的包含 .
-
使路线文件成为
$ php artisan vendor:publish
的一部分 . -
更新从
Route::get('/', PackageController::class .'@index');
到Route::get('/', MyController::class .'@index');
的路线呼叫 . -
创建
App\Http\Controllers\MyController
并使其扩展Vendor\Package\Controllers\PackageController
. -
在
MyController
中覆盖public function index()
.
选项2:使其成为包的配置的一部分 . 看起来不太理想,因为现在路由关联在两个地方,我不确定是否会有性能命中以及所有这些用于不断引用配置以便在调用路由时设置控制器 .
-
添加
'PackageController' => ['route_name', 'route_name']
的字典 . -
使用
MyController
编辑配置 .
选择规范(??):真的希望有一种规范的方法来解决这个问题 . 或者,为Laravel编写的大多数软件包都是更多的实用程序(我使用的大多数软件包除了正在创建的软件包之外)?