Laravel 5.5扩展或覆盖包控制器

时间:2017-10-23 16:47:22

标签: php laravel php-7 laravel-5.5

Laravel 5.5中用于扩展(或覆盖)主应用程序外部控制器并且基本上不重写应用程序中包的前端的惯例是什么?

我有一个包含自己的路由和控制器的包。我遇到了一些情况,其中在一个控制器中覆盖一个方法将是解决问题的一种优雅方式;但是,我自己提出的解决方案似乎并不理想。这似乎不是我似乎经常需要的东西,因为包装本身很好。

根据请求提供的考虑解决方案

选项1:我认为这是一种相对干净的方式,但如果将来路由更新可能会导致问题,我必须监控它并确保手动更新我的修改后的包含。

  • 使路径文件成为$ php artisan vendor:publish
  • 的一部分
  • 将路由呼叫从Route::get('/', PackageController::class .'@index');更新为Route::get('/', MyController::class .'@index');
  • 创建App\Http\Controllers\MyController并让其展开Vendor\Package\Controllers\PackageController
  • 覆盖public function index()中的MyController

选项2:使其成为软件包配置的一部分。似乎不太理想,因为现在路由关联在两个地方,并且我不确定是否会有性能命中以及所有不断引用配置以便在调用路由时设置控制器。

  • 添加'PackageController' => ['route_name', 'route_name']
  • 字典
  • 使用MyController编辑配置。

选项规范(??):真的希望有一种规范的方法来解决这个问题。或者,是否为Laravel编写的大多数软件包都有更多的实用程序(我使用的大多数软件包除了正在创建的软件包之外)?

0 个答案:

没有答案