CakePHP формирует $ options ['options'] - PullRequest
0 голосов
/ 08 апреля 2010

Эй!Total CakePHP noob здесь.

Обновлено внизу /

Это своего рода двоякий вопрос.В представлении, которое используется для добавления user объектов, я хотел бы использовать раскрывающееся поле (выделение) в форме.

Каждый user принадлежит group, поэтому при добавлении пользователяЯ хочу выпадающий список, который содержит все группы, к которым пользователь может присоединиться.В настоящее время поле group_id является текстовым полем.Я знаю, как заставить его быть полем выбора, но я не знаю, как программно заполнить выбор названиями групп.

Текущий метод:

echo $form->input('group_id', array(
    '1' => 'NameOfGroup1',
    '2' => 'NameOfGroup2',
    '3' => 'NameOfGroup3')
    );

Я хочу сгенерировать массив опций программно.

echo $form->input('group_id', $this->Group->find('list'));

Это не работает, хотя.Я получаю сообщение об ошибке:

Undefined property: View::$Group [APP/views/users/add.ctp, line 8]

Для меня это означает, что у меня нет доступа к объекту Group в моем представлении пользователя.

Как я могу это сделать?Опять же, я хочу сделать это программно, чтобы он обновлялся при добавлении или удалении групп.

РЕДАКТИРОВАТЬ: Почему это не работает?

// In views/users/someaction.ctp
echo $form->input('group_id',
                  array('options' => $this->formOptionsGroups)
                  );

// In controllers/users_controller.php
function someaction() {
    // Any other logic
    $this->set('formOptionsGroups', $this->Group->find('list'));
}

Ошибка в том, что группа являетсянеопределенный объект.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2010

Я думаю, что нет необходимости использовать функцию requestAction в вашей ситуации. Поскольку вы можете легко получить список групп в вашем контроллере пользователей, а затем назначить его на страницу добавления пользователя, где вам это нужно. Это было бы более изящно.

Кстати, about requestAction из поваренной книги: requestAction лучше всего использовать в сочетании с (кэшированными) элементами - как способ извлечения данных для элемента перед рендерингом.

* 1011 например *

/*code In the your user-add action of the users controller*/
function useradd()
{
    ......
    //your ownstuff skipped

    $grouplist = $this->User->Group->find('list');
    $this->set("grouplist",$grouplist);   
}

Тогда, на ваш взгляд, действие useradd:

echo $form->input('group_id', $grouplist);
0 голосов
/ 08 апреля 2010

Проблема была в том, как я запрашивал действие в контроллере.

Правильная реализация:

echo $form->input('group_id', 
                  array('options' => $this->requestAction(array('controller' => 'groups', 'action' => 'formSelectOptions')))
                  );

А затем в контроллере групп:

// formSelectOptions() returns array for use with a form $options['options']
function formSelectOptions() {
    return $this->Group->find('list');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...