私は最初のMVCであるCakePHPを習っています。私はいくつかの「ベストプラクティス」の質問をしています。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"の部分は、リダイレクト後に再利用する方が簡単だからです。これはnewcomment要素です:
<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はそれをうまくまとめ、要素の考え方はメンテナンス可能で再利用可能なコードを作成するのに適しています。ユーザがフォームアクションで 'post_id'値を簡単にマニピュレートできることに気をつけてください。前もって適切なチェックが行われていないか、セキュリティコンポーネントのフォーム入力ハッシングが使用されていない限り、*任意の*投稿にコメントすることができます。 – Ross
'$ this-> Comment-> set(array( 'post_id' => $ post_id));'は最後の行にする必要があります(どちらの場合も!) – mark
ねえ、どうですか? save($ this-> request-> data)の前にそれを行うのがもっと論理的だろうと思った...後で別のsave()をしなければならないだろうか? – John