Невозможно установить свойство для класса Model в Laravel - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь добавить внедрение зависимости от класса User, и после нескольких часов попыток я нашел следующий способ:

  • Я добавил этот код в App\Models\User class
    public function __construct()
    {
        $this->roleService = resolve(RoleService::class);
    }
  • Я проверил $this->roleService значение, оно работает нормально, но когда я пытаюсь использовать его в функции:
    public function isAdmin() {
        return $this->roleService->isAdmin($this->role_id);
    }
  • Эта функция вызывает ошибка Call to a member function isAdmin() on null. Когда я зарегистрировался $this->roleService, он вернул null.

Кто-нибудь может решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Спасибо за помощь. Я только что сослался на ответ эксперта. Он сказал, что мы не должны внедрять зависимости в класс Model, потому что это нарушит структуру проекта. Проект должен иметь следующую структуру: Controller -> Service -> Repository -> Model -> Database. Итак, я сделаю рефакторинг своего кода, следуя ему.

0 голосов
/ 12 февраля 2020

Создайте пользовательский метод доступа для вашей модели и получите / установите значение оттуда.

public function getRoleServiceAttribute ()
{
    if(is_null($this->roleService)){
        $this->roleService = resolve(RoleService::class);
    }

    return $this->roleService;
}

Затем вы можете получить доступ к атрибуту как $this->role_service

Также убедитесь, что вы объявили свойство класса $roleService как защищенное, чтобы избежать случайного доступа как $this->roleService из любого места.

...