首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 7 package controllers父类

Laravel 7 package controllers父类
EN

Stack Overflow用户
提问于 2020-07-07 18:54:36
回答 2查看 105关注 0票数 0

我已经开发了一个包含包控制器的包。一切都在加载和正常工作,但目前包控制器看起来如下所示:

代码语言:javascript
复制
<?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版本,这将是重复的逻辑和额外的问题。

EN

回答 2

Stack Overflow用户

发布于 2020-07-07 19:14:57

你的控制器不一定需要扩展默认的“基本控制器”。通常,软件包要么直接扩展Illuminate\Routing\Controller,要么拥有自己的基本控制器来扩展所有其他控制器。

如果你使用没有添加任何自定义代码的股票基础控制器,那么如果你选择将它复制到你的包中,就不会有任何重复的行,因为它只包含三个可选的特征,提供了包装更复杂代码的辅助函数。

票数 0
EN

Stack Overflow用户

发布于 2020-07-07 19:15:25

只需查看App\Http\Controllers\Controller的源代码即可

代码语言:javascript
复制
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中使用相同的逻辑,请考虑使用traitServiceProvider

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62773672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档