Создание списков выбора с помощью FormHelper в CakePHP - PullRequest
6 голосов
/ 17 апреля 2010

У меня есть две модели, Category и Point. Ассоциации определяются как:

Category hasMany Point
Point belongsTo Category

Я бы хотел, чтобы при добавлении Points в мою базу данных можно было выбрать категорию, которой он принадлежит, из поля <select> вместе с остальными данными формы.

Где мне нужно set список категорий и как я могу это сделать? И как бы я создал поле выбора?

Полагаю, это можно сделать с помощью

$form->input('categorieslist',array('type'=>'select')); //categorieslist needs
                                                        //setting somewhere.

Ответы [ 2 ]

7 голосов
/ 20 апреля 2010

Также немного обобщить:

В представлении с доступом к помощнику по форме

<?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( ... )); всегда будет возвращать массив, отформатированный для использования с опциями выбора. Если вы передаете данные в ваше представление, хранящееся в переменной с именем модели во множественном числе в нижнем регистре, то есть ( $this->set( 'categories', $categories );, то вы автоматически создадите раскрывающиеся списки для связанных моделей, используя помощник формы в представлении и передав ему индекс данных: то же название модели в единственном числе с суффиксом "_id".

Ответ Азиза на # 2 является примером этого автоматического удара.

6 голосов
/ 17 апреля 2010

В контроллере:

$categories = $this->Point->Category->find('list');
$this->set(compact('categories'));

По виду:

$form->input('category_id',array('type'=>'select'));
...