Laravel错误接口类不存在

时间:2015-06-20 11:54:37

标签: php laravel interface namespaces repository

我很高兴" Advanced Laravel"可以这么说,但是我知道大部分的基础知识,而且我正在努力了解命名空间,接口和存储库是什么,因为我不久前遇到过它。

但是,我收到以下错误,我不知道我做错了什么:

类app \ models \ Interfaces \ CategoriesInterface不存在

以下是我的代码:

routes.php文件

App::bind('App\Models\Interfaces\BaseInterface',  'App\Models\Repositories\BaseRepository');

CategoriesController.php

<?php
use app\models\Interfaces\CategoriesInterface;

class CategoriesController extends BaseController
{
protected $categories;

public function __construct(CategoriesInterface $categories)
{
    $this->categories = $categories;
}

BaseInterface.php

<?php

interface BaseInterface
{
public function all();
}

CategoriesInterface.php

<?php namespace App\Models\Interfaces;
interface CategoriesInterface extends BaseInterface { }

CategoriesRepository.php

<?php namespace app\models\Repositories;
use App\Models\Interfaces\CategoriesInterface;
use Categories;

class CategoriesRepository implements CategoriesInterface
{
public function all()
{
    $categories = $this->categories->all();
    return $categories;
}
}

EloquentCategoriesRepository.php

<?php namespace app\models\Repositories;
use App\Models\Interfaces\CategoriesInterface;
class EloquentCategoriesRepository implements CategoriesInterface {

public function all()
{
    return Categories::all();
}

2 个答案:

答案 0 :(得分:1)

尝试正确地对类/接口进行名称间隔。 EloquentCategoriesRepository.phpCategoriesRepository在命名空间中有app而不是AppCategoriesController也需要使用App\..而不是app\..

答案 1 :(得分:0)

我看到你正在尝试实现存储库模式,起初它可能看起来有点“先进”。但实际上非常简单。

因此,基本思想是使用数据库抽象应用程序的数据层,以便从一个DBS转换到另一个DBS(例如,Mysql到Mongo)。

换句话说,您正在尝试使应用程序的业务逻辑独立于数据层(查询集合/实例的位置),因此当您达到可能要更改数据库的点时,您可以实现另一个仓库。接口用于在您的应用程序和数据层之间提供合同。

Laravel实施存储库模式非常直接。

  • 创建界面
  • 创建界面的存储库(实际实现)
  • 使用服务提供者类(或者在您的情况下为App::bind
  • 绑定存储库
  • 使用存储库
  • 将依赖项实例化到您的控制器

请勿忘记使用psr-04自动加载命名空间。

在您的情况下,我认为问题是您没有自动加载命名空间。

另外CategoriesRepository.php&amp; EloquentCategoriesRepository.php都是Eloquent存储库,将返回Eloquent集合。要返回stdClass(标准PDO)数组,您必须使用\DB外观。

如果我的回答不适合您,请查看here