Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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_Laravel_Abstract Class_Repository Pattern - Fatal编程技术网

Php Laravel抽象类存储库

Php Laravel抽象类存储库,php,laravel,abstract-class,repository-pattern,Php,Laravel,Abstract Class,Repository Pattern,大家好,我正在尝试用抽象类在laravel中实现repository模式,以获得一些基本函数,这是我的新手 我要走了 分析错误:语法错误,意外的'->'(T_OBJECT_运算符) 在AbstractRepository->create($request)行上; 当我从存储库中的摘要调用函数时。这是密码 AbstractRepository.php <?php namespace App\Abstracts; use App\Exceptions\NoResou

大家好,我正在尝试用抽象类在laravel中实现repository模式,以获得一些基本函数,这是我的新手

我要走了

分析错误:语法错误,意外的'->'(T_OBJECT_运算符)

在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);
        }
   }
<?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!');
  }
}

?>

ReportRepository.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);
        }
   }
<?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);
  }
}

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

class ReportRepository extends AbstractRepository implements ReportRepositoryInterface {

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

请查看手册和方法可见性手册。

PHP 7.0.15-0ubuntu0.16.04.4的可能重复项已工作,但现在我收到类型错误:参数1传递给App\abstractsreportory::\u构造必须是AppServiceProvider中给定的App\Abstracts\Model实例、App\Models\Report实例。报表模型已经扩展了AbstractModelAppServiceProvider,如下所示
$app->bind(ReportRepositoryInterface::class,function($app){返回新的报表存储库(new Report());})您可能会发现,从长远来看,最初采用初学者的方法来学习基本的php/编程概念比潜入Laravel项目并解决将出现的许多问题更具建设性。话虽如此,您的新问题与名称空间有关。具体来说,尚未为模型指定限定路径,因此它正在尝试在其当前命名空间中定位该类。有关名称空间的更多信息,请访问:我想我已经正确地使用了名称空间。代码看起来像AbstractModel.php
没关系。我修好了。在存储库上添加了受保护的$模型和构造