Создание списков "выбрать" с помощью FormHelper в CakePHP
у меня есть две модели, Category
и Point
. Ассоциации определяются следующим образом:
Category hasMany Point
Point belongsTo Category
Я хотел бы, при добавлении Points
в мою базу данных, чтобы иметь возможность выбрать категорию, к которой она принадлежит из <select>
box, вместе с остальными данными формы.
где мне нужно set
список категорий и как я мог это сделать? И как я буду производить поле выбора?
Я предполагаю, что это можно сделать с
$form->input('categorieslist',array('type'=>'select')); //categorieslist needs
//setting somewhere.
2 ответов
в контроллере:
$categories = $this->Point->Category->find('list');
$this->set(compact('categories'));
в виде:
$form->input('category_id',array('type'=>'select'));
также немного обобщить:
в представлении с доступом к форме helper
<?php
echo $form->input( 'dataKey', array(
'type' => 'select',
'options' => array(
'key1' => 'val1',
'key2' => 'val2',
),
));
?>
выше будет отображаться выбор ввода с двумя параметрами. Вы также можете поместить пустую опцию в качестве первого элемента. Передача значения true просто добавит пустой параметр с пустым значением в начало параметров, отображаемых в HTML.
<?php
echo $form->input( 'dataKey', array(
'type' => 'select',
'options' => array(
'key1' => 'val1',
'key2' => 'val2',
),
'empty' => true,
));
?>
вы можете передать строку в "пустой" ключ, чтобы открыть его собственный текст в качестве ключевого поля пустые выбор.
<?php
echo $form->input( 'dataKey', array(
'type' => 'select',
'options' => array(
'California' => 'CA',
'Oregon' => 'OR',
),
'empty' => 'choose a state',
));
?>
последний пример, вы также можете предварительно выбрать опцию с выбранным ключом. Значение должно соответствовать стоимостью один из вариантов выбора, а не ключ.
<?php
echo $form->input( 'dataKey', array(
'type' => 'select',
'options' => array(
'California' => 'CA',
'Oregon' => 'OR',
),
'empty' => 'choose a state',
'selected' => 'California',
));
?>
модель
Model->find( 'list', array( ... ));
всегда возвращает массив, отформатированный для использования с параметрами select box. Если вы передаете данные в представление, хранящееся в переменной с именем модели во множественном числе в нижнем регистре, то есть ( $this->set( 'categories', $categories );
, то вы будете автоматически генерировать раскрывающиеся списки для связанных моделей с помощью помощника формы в представлении и передачи ему индекса данных с тем же именем модели в сингулярной форме с суффиксом "_id".
Азиза в #2 является примером того, что automagic срабатывает.