Создание списков "выбрать" с помощью 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 срабатывает.