2012-03-15 14 views
4

私は最初の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.'); 
     } 
    } 
} 

は、それがどうあるべきかということですか?

ここでは、このような質問をすることをお勧めします。ベストプラクティスを使用することは私にとって非常に重要です。

+1

あなたのアプローチは問題ありません。 @Daveはそれをうまくまとめ、要素の考え方はメンテナンス可能で再利用可能なコードを作成するのに適しています。ユーザがフォームアクションで 'post_id'値を簡単にマニピュレートできることに気をつけてください。前もって適切なチェックが行われていないか、セキュリティコンポーネントのフォーム入力ハッシングが使用されていない限り、*任意の*投稿にコメントすることができます。 – Ross

+0

'$ this-> Comment-> set(array( 'post_id' => $ post_id));'は最後の行にする必要があります(どちらの場合も!) – mark

+0

ねえ、どうですか? save($ this-> request-> data)の前にそれを行うのがもっと論理的だろうと思った...後で別のsave()をしなければならないだろうか? – John

答えて

4

コンセプトの概要として、行単位ではなく、この一般的な構造/方法で問題はありません。

私たちは通常、コメント、新しいコメントボックスなどのすべてを持つ「コメント」要素を持っています。ユーザーがその特定のものにコメントできないようにするには、変数を渡すことができます。それはそれがより良いことを意味するわけではない - ちょうど私たちのために最適です。それぞれのサイトは異なる方法でより良いシナリオを提示することがあります。

私は多くのこと(CakePHPを含む)に関する「ベストプラクティス」の質問をしてみましたが、私が見つけたのは通常、まっすぐな答えはありません。あなたのコードがシンプルで、きれいで整っていて、セキュリティ/データ完全性の問題を扱っているなら、あなたは大丈夫です。

私が考えている唯一のことは、Ajaxの素晴らしいコメントがどれだけいいかということです。ユーザーは台無しになり、何かにコメントするだけでページを更新することは迷惑とみなされる可能性があります。

隠しフィールドやURLを使用するかどうかは完全にあなた次第です。データを処理するコードが堅牢である限り、それは全く重要ではありません。また、すべて優先されます。

関連する問題