我已经开发了一个包含包控制器的包。一切都在加载和正常工作,但目前包控制器看起来如下所示:
<?php
namespace MyPackage\App\Http\Controllers;
use App\Http\Controllers\Controller; // Stock Laravel controller class
use Illuminate\Http\Request;
use Voice\CustomFields\App\Form;
class FormController extends Controller
{
...
}我希望这个类扩展Laravel Controller类,但是在我的包中,这个类当然不存在,因为它是标准Laravel应用程序的一部分。
我最终包括了use App\Http\Controllers\Controller;,但我不认为这是一个好的做法,因为我引用的东西直到我在应用程序中包含我的包之前都不存在。
我怎样才能以正确的方式做到这一点呢?我可以在我的包中复制这个类,但是如果明天发布一个带有修改后的Controller类的新的Laravel版本,这将是重复的逻辑和额外的问题。
发布于 2020-07-07 19:14:57
你的控制器不一定需要扩展默认的“基本控制器”。通常,软件包要么直接扩展Illuminate\Routing\Controller,要么拥有自己的基本控制器来扩展所有其他控制器。
如果你使用没有添加任何自定义代码的股票基础控制器,那么如果你选择将它复制到你的包中,就不会有任何重复的行,因为它只包含三个可选的特征,提供了包装更复杂代码的辅助函数。
发布于 2020-07-07 19:15:25
只需查看App\Http\Controllers\Controller的源代码即可
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}您可以在包控制器中扩展BaseController。如果Laravel团队改变了什么,它将被写在迁移说明中。
如果您需要在软件包BaseController中使用某些特定的逻辑,并且在应用程序BaseController中使用相同的逻辑,请考虑使用trait或ServiceProvider。
https://stackoverflow.com/questions/62773672
复制相似问题