Laravel 摘要 Class 资料库

Laravel Abstract Class Repository

您好,我正在尝试使用抽象 class 在 laravel 中实现存储库模式,以具有一些我是新手的基本功能。

我正在

Parse error:syntax error, unexpected '->' (T_OBJECT_OPERATOR)

行 AbstractRepository->create($request); 当我从存储库中的抽象调用函数时。这是代码

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);
  }
}

有谁能赐教吗?谢谢

当 class 是 abstract 时,这意味着您不能直接创建 class 的实例,而不是说您可以调用 class 的方法而不用创建 class 的实例,即 static 方法。 abstract class 意味着要扩展。在这种情况下,您的 ReportRepository 需要修改为:

class ReportRepository extends AbstractRepository implements ReportRepositoryInterface {

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

查看 abstraction and the manual for static 方法可见性的手册。