Я изучаю CakePHP, мой первый MVC, и у меня есть несколько вопросов «лучшей практики».Добавить комментарий к статье в CakePHP
Это мой вид для отображения новостной статьи:
<h1><?php echo h($post['Post']['title'])?></h1>
<p><?php echo h($post['Post']['body'])?></p>
<?php foreach ($post['Comment'] as $comment): ?>
<div class="comment" style="margin-left:50px;">
<p><?php echo h($comment['body'])?></p>
</div>
<?php endforeach;
echo $this->element('newcomment', array("post_id" => $post['Post']['id']));?>
Я не думаю, что вы могли бы использовать «добавить» представление для добавления комментария в другой точке зрения, поэтому я создал элемент. Надеюсь, это лучшая практика для этого.
Моя основная «проблема» была: добавление комментария. Добавляю ли я скрытое поле в форму или добавляю его в действие формы?
Я пошел с частью «id in action», потому что его легче повторно использовать для перенаправления. Это Новый_комментарий элемент:
<h1>Add Comment</h1>
<?php
echo $this->Form->create('Comment',array('action' => 'add',
'url' => array($post_id)));
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('Add comment');
?>
И тогда это функция «добавить» в CommentsController:
public function add($post_id = null) {
if ($this->request->is('post')) {
$this->Comment->set(array('post_id'=>$post_id));
if ($this->Comment->save($this->request->data)) {
$this->Session->setFlash('Your comment has been added.');
//$this->redirect(array('action' => 'index'));
$this->redirect(array('controller' => 'posts', 'action' => 'view', $post_id));
} else {
$this->Session->setFlash('Unable to add your comment.');
}
}
}
Это как это должно быть?
Надеюсь, здесь все вопросы задают здесь. Использование наилучшей практики для меня очень важно.
Ваш подход прекрасен; @Dave суммирует его хорошо, и идея элемента является хорошей для создания поддерживаемого и повторно используемого кода. Просто имейте в виду, что пользователь может легко maniuplate значение 'post_id' в действии формы; позволяя им комментировать * любую * почту, если только соответствующая проверка не была применена раньше, или используется хеширование ввода формы компонента безопасности. – Ross
только одно: '$ this-> Comment-> set (array ('post_id' => $ post_id));' должна быть последней строкой (для обоих случаев!) – mark
Эй, Марк, как это? Я думал, что было бы логичнее делать это перед данными сохранения ($ this-> request->) ... Не нужно ли мне снова делать save()? – John