2012-03-15 3 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

개념에 대한 개요로서 그리고 줄 단위가 아닌 일반적인 구조/방법으로 문제는 없습니다.

우리는 일반적으로 코멘트, 새 코멘트 박스 ... 등 모든 것을 포함하는 "comments"요소를 가지고 있습니다. 그런 다음 사용자가 특정 항목에 댓글을 달지 못하도록하려면 변수를 전달하거나 표시 할 댓글의 개수를 나타내는 변수를 전달할 수 있습니다. 그렇다고 더 나은 것은 아닙니다. 단지 우리에게 가장 잘 작동합니다. 각 사이트는 다른 방식으로 더 나은 시나리오를 제시 할 수 있습니다.

많은 것들 (CakePHP 포함)에 대한 "모범 사례"질문을 물어 보았습니다. 그리고 제가 발견 한 것은 대개 답이 없습니다. 코드가 단순하고, 정리가 잘되어 있고, 보안/데이터 무결성 문제를 다루고 있다면 괜찮습니다.

제가 생각할 수있는 유일한 점은 얼마나 훌륭한 아약스 코멘트인지입니다. 사용자가 망가져 버리고 페이지를 새로 고치면 무언가에 대해 의견을 말하기 만해도 방해가 될 수 있습니다.

숨겨진 필드 또는 URL을 사용할지 여부는 전적으로 귀하에게 달려 있습니다. 데이터를 처리하는 코드가 견고한 한, 아무 문제가 없어야하며 다시 한 번 기본 설정으로 내려갑니다.