Cakephp: поддержание отношений hasMany / ownTo в действиях контроллера - PullRequest
1 голос
/ 25 июня 2009

прости название вопроса; потратил 20 минут, пытаясь написать что-то связное (сомнительно, если получилось).

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

Сообщение имеет много комментариев Комментарий принадлежит к сообщению

Допустим, я хочу добавить новый комментарий: при сохранении комментария мне нужно включить внешний ключ родительского Post (Post.id) в массив данных перед вызовом save.

Потому что я хочу сохранить связь в контексте с пользователем - я не хочу, чтобы им приходилось выбирать сообщение из поля выбора, чтобы связать комментарий - вот два варианта, которые я вижу:

1) Поместите форму комментария в поле зрения сообщения.

2) передать идентификатор сообщения в качестве аргумента (через GET) в действие Comment.add (или записать / прочитать в / из сеанса); сохранить и перенаправить обратно на родительский Post.view.

Вариант 1 отлично подходит для блога, но не для профиля пользователя, который может быть слишком длинная форма для аккуратного включения в представление пользователя.

Вариант 2 работает, я думаю, но мне придется написать некоторые пост-специфические условия отображения / перенаправления в действие Comments.add, и оно не кажется правильным; из того, что я прочитал, я должны пытаться поддерживать отношения 1: 1 между контроллерами и модели.

Является ли № 2 приемлемым в качестве наилучшей практики Web MVC? или есть другой вариант, который я пропускаю?

Ответы [ 2 ]

1 голос
/ 25 июня 2009

Я часто делал оба вместе. Я поместил форму в представлении для поста (возможно, с использованием элемента, если вы хотите разместить его и в другом месте), но передал его в действие add своего контроллера (в данном случае, комментариев) и передал идентификатор сообщения. Просто примечание - если вам нужно реализовать личные сообщения и т. Д., Было бы лучше иметь проверку в действии add контроллера Comments, когда он входит.

0 голосов
/ 25 июня 2009

Оба варианта кажутся мне подходящими.

  1. Если форма слишком длинная, просто вставьте в нее частичный вид.
  2. Я не вижу проблемы с использованием модели в нескольких контроллерах. Конечно, не следует использовать каждую модель в каждом контроллере, но если вам нужны обе модели, почему бы и нет?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...