Форма из другой модели в представлении - PullRequest
0 голосов
/ 14 ноября 2011

Поэтому я пытаюсь расширить руководство по блогу, добавив несколько комментариев:

Post hasMany Comments

Я хочу отобразить форму добавления комментария в том же виде, что и в «пост-просмотре».Дело в том, что я не знаю лучший способ получить такой подход.Я подумал о трех способах:

  • Создание функции в Comments Controller для обработки данных.
  • Создание функции в Post Controller для обработки данных.
  • Сделкас данными в той же функции, которая работает с представлениями записей.

Основная проблема с двумя первыми «решениями» заключается в том, что ошибки проверки не отображаются в форме, если я не сделаю некоторыегрязный взлом сохранения недействительного поля в переменной сеанса и последующего синтаксического анализа переменной в обратном вызове beforeFilter, например:

function beforeFilter () {
    if ($this->Session->check('comment_error')) {
        $this->Post->Comment->validationErrors = $this->Session->read('comment_error');
        $this->Session->delete('comment_error');
    }
}

Что я в основном делаю, так это адаптирую недействительные поля к фактическому представлению и разрешаюпоказать правильно.Это работает очень хорошо, но мне кажется, что это ужасно.Каков будет наилучший подход?

Еще один связанный с этим вопрос: должен ли контроллер отражать представление?Я имею в виду на этом примере, я думал только о том, чтобы иметь модель комментариев и иметь дело со всеми данными в контроллере, где находится форма для добавления комментария (даже если он находится в почтовом контроллере).

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я вижу это так:

  1. Под каждым постом есть поле ввода "Добавить комментарий" с кнопкой для отправки.
  2. После отправки некоторого текста форма перенаправляется в comments_controller, где комментарий сохраняется с этим post_id, телом, автором, датой и т. Д.
  3. После сохранения комментария и выполнения всей логики требуетсяВы возвращаетесь к сообщению.
  4. Под каждым сообщением отображаются все связанные комментарии (с одинаковым post_id, отсортированным по дате или как угодно).
0 голосов
/ 14 ноября 2011

Похоже, вы ищете Mutlivalidatable поведение: http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

Это позволяет вам определить более 1 набора правил проверки для каждой модели. Используйте свой контроллер, чтобы определить, какой из них применять при публикации чего-либо.

P.S. Я когда-либо использовал это только в проекте Cake 1.3, не уверен, что он будет работать на 2.0.

...