【发布时间】:2023-03-05 07:45:01
【问题描述】:
我是 php 和 Laravel 的初学者。我在 Laravel 6 中有项目。 我用这篇文章制作我的项目:https://itnext.io/repository-design-pattern-done-right-in-laravel-d177b5fa75d4 我有我的服务器 php 7.4
我有这个代码:
interface RepositoryInterface
{
public function all(array $columns = ['*']);
public function list(string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*']);
public function listWithPaginate(string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*']);
public function create(array $data);
public function update(array $data, int $id, string $attribute = 'id');
public function delete(int $id);
public function find(int $id, array $columns = array('*'));
public function getModel();
public function findOrFail(int $id, array $columns = array('*'));
}
interface SlideRepositoryInterface extends RepositoryInterface
{
public function search(string $query, string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*'], int $perPage = 10);
}
use App\Models\Slide;
use App\Repositories\Interfaces\SlideRepositoryInterface;
use Cache;
class SlideRepository implements SlideRepositoryInterface
{
public function __construct(Slide $model)
{
$this->model = $model;
}
public function search(string $query, string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*'], int $perPage = 10)
{
return $this->model->where('line1', 'LIKE', '%' . $query . '%')->orWhere('id', 'LIKE', '%' . $query . '%')->with($with)->orderBy($orderByColumn, $orderBy)->paginate($perPage, $columns)->appends(request()->query());
}
}
class SlideServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(
SlideRepositoryInterface::class,
SlideRepository::class
);
}
}
还有我的控制器:
public function __construct(SlideRepositoryInterface $repository, Request $request)
{
$this->model = $repository;
$this->sortBy = $this->sortResultsBy($request->input('sortAfter') ?? 0, 'line1');
}
abstract class BaseRepository implements RepositoryInterface
{
protected $model;
public function all(array $columns = array('*'))
{
return $this->model->get($columns);
}
public function list(string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*'])
{
return $this->model->with($with)
->orderBy($orderByColumn, $orderBy)
->get($columns);
}
public function listWithPaginate(string $orderByColumn, string $orderBy = 'desc', array $with = [], array $columns = ['*'], int $perPage = 10)
{
return $this->model->with($with)
->orderBy($orderByColumn, $orderBy)
->paginate($perPage, $columns)->appends(request()->query());
}
public function create(array $data): int
{
return $this->model->create($data)->id;
}
public function update(array $data, int $id, string $attribute = 'id'): void
{
$this->model->where($attribute, '=', $id)->update($data);
}
public function delete(int $id): void
{
$this->model->destroy($id);
}
public function find(int $id, array $columns = array('*'))
{
return $this->model->find($id, $columns);
}
public function getModel()
{
return $this->model;
}
public function getFirst(int $id)
{
return $this->model->where('id', $id)->first();
}
public function findOrFail(int $id, array $columns = array('*'))
{
return $this->model->findOrFail($id, $columns);
}
}
运行此代码时出现错误:
目标 [App\Repositories\Interfaces\SlideRepositoryInterface] 不是 在构建时可实例化 [App\Http\Controllers\psCMS\SlideController]
我想在存储库设计模式中制作我的项目。
为什么它不起作用? 如何修复我的项目?
请帮帮我:)
【问题讨论】:
-
你注册了你的ServiceProvider吗?