2013-08-02 3 views
0

그래서 저는 여전히 CakePHP를 사용하고 있습니다. 투표 대상자가 여러 명 포함되어있는 사이트에서 일하고 있습니다.보기를 통해 MySQL 레코드 수정

기본적으로 사람들이 투표하는 주제 인 "항목"이라는 표가 있습니다. 엔트리에는 양수 값과 음수 값을 모두 저장할 수있는 정수 인 "vote_value"라는 필드가 있습니다. 사람들은이 항목에 + 또는 - 투표를하고 항목의 투표 값이 영향을받습니다.

문제 : 나는 vote_value 필드를 수정하는 적절한 방법이 무엇인지 알지 못합니다. 사람들이 엔트리의 인덱스에서 볼 수있는 위아래 화살표가 있습니다. 그 엔트리의 새로운 투표 값으로 페이지를 새로 고치거나 새로 고침없이 vote_value를 새로 고침하고 싶습니다.

모델의 vote_value 필드를 수정하는 방법을 생각했지만 MVC의 핵심을 깨뜨리는 것이 하드 코어라고 생각합니다. 컨트롤러 용으로 다른 작업을 만들어야합니까?

도움을 주시면 감사하겠습니다.

+0

케이크 구현은 MVC 디자인 패턴과 원격으로 관련이 없기 때문에 "MVC 제동"에 대해 걱정하지 않아야합니다. 벌써 사라졌어. 캐스팅 투표의 경우''/ posts/12/upvote ''와 같은 링크를 만들어서''AppModel'' activerecord 매개 변수를 변경합니다. 그런 다음 나중에 XHR 지원을 추가하기 위해 HTML 템플릿을 렌더링하는 부분을 원격으로 간단하게 처리 할 수 ​​있습니다. –

답변

1

예. 컨트롤러에서이 작업을 수행해야합니다. 투표를 할 때 아약스에 전화를 걸면 액션이 json이나 true 또는 false로 응답해야하므로보기를 만들 필요가 없습니다. 당신이 다른 곳에서 값을 추가하기위한 논리를 사용하여 (예를 들어, 사용자는 단지 예를 들어, 한 번 투표 할 수)해야 할 경우

class EntryController extends AppController { 

    public function castVote($voteValue) { 
     //some logic or whatever 
     $this->Entry->changeValue($voteValue); 

     //don't create view 
     $this->autoRender = false; 
     echo 'all ok or some other message'; 
     return; 
    } 
} 

$this->Entry->changeValue($voteValue) 같은 뭔가가, 엔트리 모델 내부 기능입니다. 그렇게하면 코드를 재사용 할 수 있습니다. 또는 컨트롤러에 모든 로직을 추가 할 수는 있지만 지방 컨트롤러보다 뚱뚱한 모델을 사용하는 것이 좋습니다.

당신은보기에서 아약스 다음 대신 어떤 임의의 메시지의, $this->Entry->changeValue($voteValue) 반환 실제 값 위해선, 새로운 값을 업데이트 할, 그리고 에코 경우 그 뷰

//inside controller 
$newValue = $this->Entry->changeValue($voteValue); 
$this->autoRender = false; 

//check that the value is a number, not boolean, so you know the update was valid 
echo $newValue; 
return; 

I에 컨트롤러 당신이 설명했던 것을 기반으로 엔트리 모델과 컨트롤러에 함수를 넣었습니다. 그러나 당신이 느끼는 곳에 함수를 두는 것이 더 많은 논리입니다.

+0

매력처럼 작동했습니다! 다음에는 실제로 아약스를 제대로 사용하는 방법을 알아 내야 할 것입니다. 여하튼, 감사합니다! – div