簡體   English   中英

在 Laravel 中構建控制器時接口不可實例化

[英]Interface is not instantiable while building Controller in Laravel

我是 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] 時不可實例化

我想以 Repository 設計模式制作我的項目。

為什么它不起作用? 如何修復我的項目?

請幫我 :)

我相信您還沒有注冊您的服務提供商。 config/app.php執行此操作。

'providers' => [
    // Other Service Providers

    SlideServiceProvider ::class,
],

你的類沒有實現完整的接口,所有的接口方法都需要實現。 IDE 通常可以自動生成這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM