Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过继承实现Laravel公共服务_Php_Inheritance_Laravel 5 - Fatal编程技术网

Php 通过继承实现Laravel公共服务

Php 通过继承实现Laravel公共服务,php,inheritance,laravel-5,Php,Inheritance,Laravel 5,问题 我有一组控制器,它们使用一组特定的服务。我想知道是否可以/正确地利用继承来避免我不得不一直将它们注入控制器。这就是我计划要做的 class MasterController extends controller{ public function _construct(){ $this->userData = App::make(UserService::class) $this->fooData = App::make(F

问题

我有一组控制器,它们使用一组特定的服务。我想知道是否可以/正确地利用继承来避免我不得不一直将它们注入控制器。这就是我计划要做的

class MasterController extends controller{
    public function _construct(){
            $this->userData = App::make(UserService::class)
            $this->fooData = App::make(FooService::class)
    }
}

class UserController extends MasterController {
    public function __construct(BashService $bashService){
        parent::__construct();
        $this->bashData = $bashService;
    }

    public function someFunction(){
        $something = $this->userData->doUserSomething();
    }
}
这是个好主意吗?这真是个坏主意吗?为什么?我想这可能会使我不必一次又一次地向控制器中注入公共服务


谢谢

问题:

我想知道是否可以/正确地利用继承来避免我不得不一直将它们注入控制器

回答:

  • 是的,它是可能的,并且它是正确的,利用继承 接下来,您将保持控制器清洁,这意味着您 控制器中可以有功能,但该功能将导致 从不同类实现或继承的不同函数
  • 问题:

    这是个好主意吗

    回答:

  • 显然,正如我上面提到的,这是一个好主意 保持控制器清洁是可以遵循的最佳实践 因为您的方法将从业务逻辑中分离出来 您实现了所有的取数、过账和计算,还有什么 不是因为你的控制器是干净的,所有的方法都是动作 从另一个类返回,并给出准确的响应,例如(真或假) 错误)
  • 问题:

    为什么

    回答:

  • 由于我已经解释了大部分内容,我想进一步说明 我们将向您推荐存储库模式,以便 单词库我的意思是:

    • 源代码存储库是一种文件归档和web托管设施,其中包含大量源代码,用于软件或应用程序 网页,公开或私下保存。他们经常 用于开源软件项目和其他多开发人员 处理各种版本的项目
    在laravel中,您可以按照存储库模式对项目进行编码 这是目前发现的最佳实践

    您也可以在laravel存储库上进行谷歌搜索

    我有一个例子可以让你明白


  • 嗨,萨加尔,谢谢你的评论。我熟悉存储库模式,并且在我的服务层中实际使用了它。我使用的流程是controller->service->repo。在这个服务中,我做任何需要的业务逻辑,这样我就可以保持我的控制器精简,我的repo只用于DB活动。为什么不使用traits来创建所需功能的组合呢?除了使用继承之外,这是添加它的另一种方式,好的一面是,您不会因为不能同时从多个类继承而限制组合所需的功能。我考虑过这一点,但它感觉不正确,因为trait是用于需要一组特定方法的情况。这更多的是为了包含其他类,其目的只是为了不让所有的控制器构造函数都被疯狂地填充。