#laravel #laravel-5 #mutators
#laravel #laravel-5 #мутаторы
Вопрос:
Я хочу заполнить поле выбора из контейнера Laravel IoC.
AppHttpUtilitiesBillingHelper.php
views/billing/create.blade.php
views/billing/edit.blade.php
Создайте таблицу:
Теперь вместо значения я хочу отобразить некоторые флаги и символы валюты.
Должен ли я использовать мутаторы?
Проблема
Если я использую мутаторы, когда я открываю страницу редактирования, я всегда вижу первое выбранное значение из BillingHelper вместо выбранного.
Любая помощь? Спасибо.
Ответ №1:
Я знаю, что это должен быть комментарий, но у меня нет репутации.
Что делать, если на странице редактирования вы заменяете значение null в Form::select на $client-> language и $client-> currency.
Я знаю, что вы привязываете значения к области с помощью Form::Model. Но стоит попробовать.
Комментарии:
1. Или, чтобы улучшить его, добавьте old(‘currency’, $client-> currency) вместо null .
2. Спасибо, Мауро, но все равно не работает, если я использую Accesor для изменения кода во флагах и символах. Есть ли альтернатива accesor? : D .. или лучший способ его использования.
3. Это не альтернатива средствам доступа, но… Ваши данные будут статическими или вы собираетесь изменить их, выполнив запрос к БД? Потому что вы могли бы просто создать другой файл в папке config и получить его как config (‘file_name.currency’) Если вам нужно имя валюты: config(‘file_name.currency.eur’)
4. Спасибо, Мауро, я пробовал также с view composers. Я получил ту же ошибку … — «Ваши данные будут статическими или вы собираетесь их изменить» Я хочу заполнить поля выбора из массива. Я не думаю, что мне нужно создавать отдельную таблицу для каждого поля выбора, которое я использую. После отправки формы я хочу получить выбранные значения из базы данных и отобразить их на моей индексной странице в моей таблице. Мне также нужно изменить некоторые значения с помощью некоторых символов и значков (языковые флаги и т. Д.) На моей индексной странице (не в базе данных)
5. До сих пор я пытался сделать это с помощью средств доступа, но страница редактирования (привязка модели) больше не работает. Я больше не получаю выбранные значения.
Ответ №2:
При использовании мутаторов сопоставление больше не будет происходить. Вам придется использовать соответствующий статический массив в соответствии со значениями, которые вы вернете. (флаги)
Вы можете заставить это работать, если создадите мутатор для сохранения данных и снова упростите до [‘it’, ‘en’, ‘lv’] , в противном случае ваши сохраненные данные будут отличаться, и первоначальный мутатор не будет работать во второй раз. Вы все равно можете выполнить одноразовый тест.
Вот почему:
Ваша привязка формы использует $bill->language для извлечения фактических сохраненных данных и сравнения их со значениями в вашем статическом массиве $ bill::lang. Если совпадение не найдено, всегда будет выбрано первое значение.
Можете ли вы предоставить определение полей валюты и языка при переносе для счета?
Также извлеките ваши значения из базы данных bills и вставьте их сюда для языка и валюты. Они должны быть в определенных статических наборах.
Ответ №3:
Laravel
есть способ пропустить средство доступа / мутатор с помощью $model->getOriginal('data_field')
. « getOriginal()
» получает исходные значения атрибутов модели.