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

Php 在Laravel中构建控制器时,接口不可实例化

Php 在Laravel中构建控制器时,接口不可实例化,php,laravel,Php,Laravel,我是php和Laravel的初学者。我在拉雷维尔6号有个项目。 我用这篇文章做我的项目: 我的serwer php 7.4中有 我有以下代码: interface RepositoryInterface { public function all(array $columns = ['*']); public function list(string $orderByColumn, string $orderBy = 'desc', array $with = [], arra

我是php和Laravel的初学者。我在拉雷维尔6号有个项目。 我用这篇文章做我的项目: 我的serwer 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]不可用 在构建时可实例化 [应用程序\Http\Controllers\psCMS\SlideControl]

我想让我的项目在存储库设计模式

为什么它不起作用? 如何修复我的项目


请帮帮我:)

我相信您尚未注册您的服务提供商。在
config/app.php
中执行此操作

'providers' => [
    // Other Service Providers

    SlideServiceProvider ::class,
],

您的类没有实现完整的接口,所有的接口方法都需要实现。IDE通常可以自动生成这些方法。

您注册了服务提供商吗?现在我发现错误类App\Repositories\SlideRepository包含9个抽象方法,因此必须声明为抽象方法或实现其余方法(App\Repositories\Interfaces\RepositoryInterface::all,App\Repositories\Interfaces\RepositoryInterface::list,App\Repositories\Interfaces\RepositoryInterface::listWithPaginate,…)超级,您解决了第一个障碍。您需要从接口实现所有方法,phpstorm可以自动生成它们,它们可以为空