@Artem0071
Безработный mr. Junior

Как динамически преобразовывать атрибут?

Есть БД в которой такая структура:
id | title_en | title_ru | ...
То есть от выбора языка должен браться тот или иной заголовок

Сделал так:
$items = Item::all();
foreach ($items as $item) {
    $item->makeVisible('title_' . $request->lang); // lang беру из параметра, или header'а, или "en"
}


Получилось как надо, но столкнулся с проблемой что на фронте теперь тоже необходимо правильно это все обрабатывать потому что сам атрибут имеет то _ru, то _en ...

А хотелось бы чтобы когда с фронта приходит язык, то атрибут был бы только одним "title", без всяких title_ru, title_en и тд

Можно ли как то это устроить?
Думал как то в модели это сделать, но там ведь нельзя обратиться к request?

==============================
Вот так изменил перебор:
$items = Item::all();
foreach ($items as $item) {
    $title = 'title_' . $request->lang;
    $item->title = $item->$title;
}

Но может все равно есть получше решение?
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Выбранный язык не должен устанавливаться в контроллере.

То есть вам надо где то еще до контроллера, например в сервис провайдере получить язык из request или из сессии/бд/конфигов и сохранить его доступным для получения в любой точке.

После чего реализуйте метод модели, можно в виде мутатора, для получения значения нужного поля исходя из установленного ранее языковой переменной.
Ответ написан
Ваш ответ на вопрос

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

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