В контроллере:
public function add() {
if ($this->data) {
if ($this->Item->save($this->data)) {
$this->redirect(…);
}
}
$categories = $this->Item->Category->find('list');
$this->set(compact('categories'));
}
Представление:
echo $this->Form->input('category_id');
(что эквивалентно:)
echo $this->Form->input('category_id', array('type' => 'select', 'options' => $categories));
Вам просто нужно получитьсписок категорий, для которых find('list')
специализируется, и элемент ввода, который позволяет пользователю выбрать категорию.category_id
будет сохранен как любое другое поле модели * 1012. *
Если вы хотите предварительно заполнить категорию с другой страницы, используйте что-то вроде этого:
public function add($category_id) {
$category = $this->Item->Category->find('first', array('conditions' => array('Category.id' => $category_id), 'recursive' => -1));
if (!$category) {
$this->Session->setFlash('Select a valid category');
$this->redirect(array('controller' => 'categories', 'action' => 'select_category'));
}
if ($this->data) {
$this->data['Item']['category_id'] = $category_id;
if ($this->Item->save($this->data)) {
$this->redirect(…);
}
}
$this->set(compact('category'));
}
Просмотр:
<p>Adding item to category <?php echo $category['Category']['name']; ?></p>
<?php echo $this->Form->create('Item', array('url' => array('action' => 'add', $category['Category']['id']))); ?>
Из списка выбора категории просто ссылку на действие Добавить элемент:
echo $this->Html->link("Add item to {$category['Category']['name']}", array('controller' => 'item', 'action' => 'add', $category['Category']['id']));