Передача идентификатора в метод через форму сообщения в CakePHP - PullRequest
2 голосов
/ 01 марта 2012

У меня есть следующий сценарий:

Пользователь просматривает сообщение в моем приложении по следующему URL: /posts/Post_tile-210

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

Мой вопрос заключается в том, что я вижу три возможных способа передачи идентификатора записи для добавления метода комментария:

1.) Передайте идентификатор сообщения с помощью действия формы, например: /comment/add/id:210

2.) Передайте идентификатор сообщения через скрытое поле, например: <input type="hidden" name="id" value="210">

3.) Захватите почтовый идентификатор в методе контроллера через сам URL

Каков наилучший способ и каковы плюсы и минусы?Мне больше всего нравится первое, так как оно кажется приятным и простым в настройке и более совместимым с параметрами запроса / именования в Cake Apps.

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Поскольку у вас есть post_id в модели и таблице комментариев, проще использовать скрытое поле:

echo $this->Form->input('post_id', array('type' => 'hidden', 'value' => $post_id));

И когда вы отправляете эту форму, вы получаете готовый массив для сохранения комментария с ключом публикации.

2 голосов
/ 01 марта 2012

Вы можете сделать это любым способом.Вы можете опубликовать его как скрытое поле:

echo $this->Form->input('post_id', array('type' => 'hidden', 'value' => $post_id));

или как параметр при отправке:

echo $this->Form->input('Post', array('type' => 'post', 'url' => array('controller' => 'posts', 'action' => 'add', $post_id)));

Если сделать post_id скрытым полем, вы получите преимущество от включения post_idв запросе, не требуя никакого дополнительного кода для использования его с $this->Model->save, потому что он будет включен как $this->data['Comment']['post_id'].Это означает, что вам нужно будет только вызвать $this->Comment->save($this->data);, и он сохранит его в таблице.

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

$this->data['Comment']['post_id'] = $post_id;

или

$this->Comment->post_id = $post_id;

Поэтому рекомендуется включить его в качестве скрытого поля в форме.

1 голос
/ 01 марта 2012

Я бы настроил метод контроллера следующим образом:

 function add(post_id){

И передать это как

 URL/comment/add/variable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...