Элемент CakePHP, содержащий форму - как использовать отношения таблицы - PullRequest
0 голосов
/ 09 ноября 2011

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

Как я могу создать элемент, который работает таким же образом?

Я попытался вставить данные в элемент, используя

$someVar = $this->requestAction('posts/add');
ив PostsController
...
$categories = $this->Post->Category->find('list');
if (isset($this->params['requested'])) {
   return compact('categories');
} else {
   $this->set(compact('categories'));
}

, но я не знаю, где эти данные должны идти, чтобы они были подхвачены

echo $this->Form->input('category_id');

Я использую CakePHP 2.0, хотя это, вероятно, применимок другим версиям.

РЕДАКТИРОВАТЬ

Я был почти там, и ответ от Oldskool показал мне, что это было возможно, поэтому я копался в переменную $this и нашел гдеэто должно идти.В представлении используйте:

$this->viewVars = $this->requestAction('posts/add');

, и элемент select заполняется, как в представлении запеченного добавления (т.е. автоматически).

1 Ответ

2 голосов
/ 09 ноября 2011

У меня похожая конструкция в одном из моих собственных приложений Cake.Ваш подход правильный, убедитесь, что контроллер извлекает данные, о которых ваша форма должна знать.В приведенном выше коде Cake должен автоматически поднять его, если не получится, вы можете «форсировать» опции, добавив ключ «options» в массив опций, например:

echo $this->Form->input('category_id', array('options' => $categories));

AsОтказоустойчивость вы можете добавить проверку, как это:

if(!isset($categories) || empty($categories)) {
    // Do whatever you want here to catch the lack of $categories, like:
    die("No categories specified in controller!");
} else {
    echo $this->Form->input('category_id', array('options' => $categories));
}
...