#php #forms #laravel-4 #blade
#php #формы #laravel-4 #laravel-blade
Вопрос:
Я хочу создать поле выбора названий городов для формы. Я смог создать и передать в свое представление объект $ city, значения которого я могу корректно перечислить в своем представлении, если просто отобразить их вне формы. Для поля выбора необходимы два свойства $ city: $city-> id и $city-> name.
Мои попытки сделать это с помощью Blade заканчиваются неудачей. Проблема сводится к следующему: как мне вложить @foreach внутрь оператора Blade Form::select? Например, без @foreach, просто переходя к паре городов, это работает отлично, включая выбор пустого места и Альбукерке по умолчанию:
{{ Form::open() }}
{{ Form::Label('city_bldg_id','City:') }}
{{ Form::select('city_bldg_id', array(
'',
'2'=>'Albuquerque',
'11'=>'Bernalillo'
),'2') }}
{{ Form::close() }}
Для того, чтобы заполнить поле выбора всеми значениями в $ city, казалось бы, мне нужно использовать @foreach внутри массива Form::select. Возможно ли это сделать? Если да, то каким образом? Все мои попытки приводят к синтаксическим ошибкам. Или $ city должен быть массивом, а не объектом?
Я так близко, что могу попробовать это, но я не могу понять последний шаг. Любые предложения по соответствующему коду были бы высоко оценены. Спасибо!
Ответ №1:
Обычно я предпочитаю создавать выбранные данные перед переходом к представлению. Это легче читать, если это просто
{{ Form::select('city_bldg_id', $cities, '2' }}
(Примечание сбоку: не уверен, нужно ли заключать 2
в кавычки. Вероятно, нет.)
Таким образом, вы можете выполнять foreaches все, что хотите, чтобы создать массив, и вы можете сделать это на чистом PHP вместо Blade.
Одним из простых способов создания массива, если вы получаете данные из модели Eloquent, например, City
, является lists()
метод:
$cities = City::lists('name', 'id');
Если вам нужно отфильтровать определенные города, вы просто делаете это обычным способом:
$cities = City::where('somefield', '=', 'value')-> etc... ->lists('name', 'id');
(Надеюсь, я не слишком много предполагаю о том, что вы уже знаете. Если это кажется слишком примитивным и вам не помогает, я приношу извинения.)
Комментарии:
1. Большое спасибо, Джоэл. Ваши ответы были правильными на моем уровне; я все еще изучаю основы Laravel. Теперь у меня все работает идеально с помощью lists (), но у меня остаются два незначительных вопроса: 1) Значение по умолчанию, например, 2, как указано выше, не работает (это вызывает синтаксическую ошибку, с одинарными кавычками или без них), и 2) Как я могу добавить пустое значение, которое выдает NULL в качестве выбора в поле выбора?
2. Ой, я виноват. Проблема со значением по умолчанию была просто опечаткой (забыл закрыть метод с помощью «)». Итак, это не проблема. И на данный момент я не собираюсь беспокоиться о выборе null — возможно, появится простое решение для этого. Приветствия.
3. Рад, что у вас получилось! Для второго вы могли бы просто
array_merge([''], $cities);
— по сути, вы берете список, содержащий только пустое значение, и ваш список городов, и объединяете их. Я признаю, что это не очень эстетично, но работает гладко.4. Очень умно — мне это нравится. Еще раз спасибо! Я действительно ценю вашу помощь. Отличных праздничных выходных. -Стив
5. Добро пожаловать, спасибо вам, аналогично, и с днем рождения вашей страны. 🙂