@procode
Разработчик

Как правильно оптимизировать работающий код (здесь же, код маленький) в Laravel?

Здравствуйте.

У меня в проекте Profile - это отдельная от User модель. И она активно взаимодействует с другими сущностями (по сути, User - просто для аутентификации и авторизации, а все остальное - на Profile).

На данном этапе я пишу в контроллеры такой код:
private function getProfile()
{
    $auth_id = Auth::id(); //id текущего пользователя
    $user = User::find($auth_id); //получаем объект текущего пользователя

    $profile = Profile::firstOrNew(['user_id' => $auth_id]); //ищем или создаем кастомера для текущего пользователя
    $user->profiles()->save($profile); // сохраняем его в базе вместе с отношением к текущему юзеру

    return $profile;
}

Прямо в каждом контроллере, где используется сущность Profile.

И далее уже пользуюсь объектом $profile. И это работает.

Да, понимаю, что это жесть-жесть)) но потому и завел эту тему.

Как наиболее грамотно разрулить такую ситуацию?

Только не пишите пожалуйста общие фразы типа "нужно использовать слой сервиса" или вроде того. Я и так понимаю что тут нужно что-то использовать, что я пока не вполне понимаю ))

В общем, чем конкретнее - тем лучше.

Спасибо.

P.S. И да, понимаю также, что тут есть несколько вариантов. Какой наиболее мягкий для новичка? Я думаю, может просто как-то в модель это запихнуть, чтобы хотя бы в каждом контроллере этот код не дублировать. По сути, конечно, надо чтобы при регистрации создавался Profile, но потом все равно придется проверять есть он или нет, так что это не принципиально на данном этапе. Просто я боюсь закопаться по уши во всех этих "слушателях" и "контейнерах"))) Лучше делать, так, чтобы понимать что делаешь...
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
@procode Автор вопроса
Разработчик
Просто перенес код из контроллера в модель Profile и сделал метод статическим

Вызываю в контроллере типа Profile::getCurrent()

Работает ))

Но таки понимаю, что этому не место даже и в модели. По крайней мере не в таком виде.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы