当前位置: 首页 > 知识库问答 >
问题:

Laravel抽象类存储库

顾超
2023-03-14

嗨,我正在尝试使用抽象类在 laravel 中实现存储库模式,以拥有一些我新手的基本功能。

我正在得到

分析错误:语法错误,意外'-

在AbstractRepository一行-

AbstractRepository.php

    <?php

    namespace App\Abstracts;

    use App\Exceptions\NoResourceFoundException;
    use App\Exceptions\ResourceNotFoundException;

    abstract class AbstractRepository
    {

        /**
         * @var Model
         */
        protected $model;

        /**
         * @var array
         */
        public $errors = [];

        /**
         * @param Model $model
         */
        public function __construct(Model $model)
        {
            $this->model = $model;
        }

        public function create(array $data)
        {
            return $this->model->create($data);
        }
   }

ReportRepositoryInterface.php

<?php

namespace App\Interfaces;

interface ReportRepositoryInterface {

  public function createReport (array $data);
}
?>

ReportRepository.php

<?php

namespace App\Repositories;

use App\Interfaces\ReportRepositoryInterface;
use App\Models\Report;
use App\Services\ApiResponse;
use Illuminate\Http\Request;
use App\Abstracts\AbstractRepository;

class ReportRepository implements ReportRepositoryInterface {

  public function createReport(array $request){
    AbstractRepository->create($request);
    return ApiResponse::responseData($request, 'Record successfully created!');
  }
}

?>

ReportsController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Interfaces\ReportRepositoryInterface;
use Illuminate\Support\Facades\Log;

class ReportsController extends Controller
{

  public function __construct(ReportRepositoryInterface $report, Request $request)
  {
    $this->report = $report;
    $this->request = $request;
  }

  public function createReport()
  {
    $data = $this->request->all();
        return $this->report->createReport($data);
  }
}

有谁能开导一下吗?谢谢

共有1个答案

何哲
2023-03-14

当一个类是抽象时,这意味着您不能直接创建该类的实例,而不是您可以在不创建该类实例的情况下调用该类的方法,这将是静态方法抽象类旨在扩展。在这种情况下,您的ReportRepostory需要修改为:

class ReportRepository extends AbstractRepository implements ReportRepositoryInterface {

    public function createReport(array $request){
        $this->create($request);
        return ApiResponse::responseData($request, 'Record successfully created!');
    }
}

看一看抽象手册和静态方法可见性手册。

 类似资料:
  • 我学会了通过存储基类指针将派生类指针存储在基类向量中: 但是如果我有一个抽象基类: 从中派生出另外两个抽象类。 以及来自二级抽象类的其他几个派生类: 是否有可能将它们全部存储在多态性载体中?和往常一样,我做了以下工作: 但是如何将两个多态向量存储在基类向量中呢?

  • 问题内容: 我知道spring数据存储库的实现: 创建一个像这样的接口: 现在是一个,我的项目中有(很多)更多目录。 我想知道是否可以制作1个适用于所有目录的存储库: 现在,有了保存,我不会直接看到问题,但是如果我要搜索一个,AbstractCatalog我已经确定我会碰壁的,因为回购协议将不知道他必须选择哪种对象。 AbstractCatalog.class Country.class 有谁知道

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为 抽象类。 在 Java 中抽象类的语法格式如下: 其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类

  • 本文向大家介绍PHP 抽象类,包括了PHP 抽象类的使用技巧和注意事项,需要的朋友参考一下 示例 抽象类是无法实例化的类。抽象类可以定义抽象方法,这些方法没有任何主体,只有一个定义: 应该通过子类扩展抽象类,然后可以提供这些抽象方法的实现。 这样的类的主要目的是提供一种模板,该模板允许子类继承,“强制”遵循的结构。让我们用一个例子来详细说明一下: 在此示例中,我们将实现一个Worker接口。首先我

  • 本小节我们将学习 Java 中的抽象类,你将了解到抽象类的概念和特点,抽象类在程序设计时的应用场景,什么是抽象方法,抽象方法有什么特点,如何声明一个抽象方法等内容。 1. 概念和特点 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 值得注意的是,一个抽象类不能直接实例化,但类的