Php Laravel抽象类存储库
大家好,我正在尝试用抽象类在laravel中实现repository模式,以获得一些基本函数,这是我的新手 我要走了 分析错误:语法错误,意外的'->'(T_OBJECT_运算符) 在AbstractRepository->create($request)行上; 当我从存储库中的摘要调用函数时。这是密码 AbstractRepository.phpPhp 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
<?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没关系。我修好了。在存储库上添加了受保护的$模型和构造