通过在 Laravel 中称为服务的另一层访问存储库模式

Accessing repository pattern through one more layer called service in Laravel

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

我装了一个

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

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

当您访问 class 个变量时,您需要执行 $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?)