通过Laravel中另一个名为service的层访问存储库模式

时间:2015-05-12 07:01:30

标签: laravel service laravel-5 repository-pattern

我在我的项目中创建了一个存储库层,可以通过使用接口的控制器方法完全访问。现在我要添加的是一个服务层。这意味着我希望所有控制器方法操作都将通过该服务完成。所以我在服务文件夹中创建了一个文件,并尝试通过服务访问存储库功能。

我在那里装了一个

存储库访问的构造函数..但我收到错误

public function __construct(IFamilyRepository $familyRepository){
            $this->$familyRepository = $familyRepository;    // getting error on this line
    }

    public function testRepository(){
        $this->$familyRepository->getAllGrandfather();
        return "null";
    }

我收到错误:

ErrorException in FamilyService.php line 19:
Object of class App\Repositories\Eloquent\FamilyRepository could not be converted to string
in FamilyService.php line 19
at HandleExceptions->handleError('4096', 'Object of class App\Repositories\Eloquent\FamilyRepository could not be converted to string', 'D:\files\xampp\htdocs\laravel\dolovers-project-nayeb-moshai\app\Services\FamilyService.php', '19', array('familyRepository' => object(FamilyRepository))) in FamilyService.php line 19
at FamilyService->__construct(object(FamilyRepository))
at ReflectionClass->newInstanceArgs(array(object(FamilyRepository))) in Container.php line 817
at Container->build('App\Services\FamilyService', array()) in Container.php line 656

1 个答案:

答案 0 :(得分:2)

访问类变量时,您需要执行$this->some_var,而不是$this->$some_var。在后一种情况下,PHP认为你正在尝试使用$some_var的字符串值,但它不能 - 这就是为什么它抱怨无法转换为字符串。

假设您的其他代码正确无误,只需更改即可立即使用。

public function __construct(IFamilyRepository $familyRepository){
    $this->familyRepository = $familyRepository;
}

public function testRepository(){
    $this->familyRepository->getAllGrandfather();
    return "null";
}

(另外,作为旁边 - 你知道这比我更好 - 应该是IFamilyRepository,而不是FamilyRepository吗?)