2012-03-05 6 views
0

나는 이것을하기위한 최선의 방법이 무엇인지 궁금해했다. SubmissionsController가 있고 그 안에는 각 제출에 대한 표시 인 view() 메소드가 있습니다. 모든 제출물에는 즐겨 찾기가 있으며 사용자는 해당 즐겨 찾기에 투표 할 수 있습니다. 사용자가 이전에 투표했는지 여부에 따라 아이콘을 변경하고 싶습니다. 나는 이런 식으로 생각했다 :보기 내에서 컨트롤러 메소드 호출하기 CakePHP

// checkExistingFavorite would be a boolean method which returns true if the user has    already favorited it 
<?= if (SubmissionsController::checkExistingFavorite($userId, $submissionId)) { ?> 
<span style="favorited">Remove Favorite</span> 
<? } else { ?> 
<span style="not-favorited">Favorite</span> 
<? } ?> 

분명히, 나는 내보기 내에서 직접 SubmissionsController를 호출하면 안된다. 내 질문은 이것을 처리하는 가장 좋은 방법은 무엇입니까? 사용자가 제출물을 보러 갈 때마다 확인해야하므로 캐시해야할지 확실하지 않습니다.

여러 데이터가 다음 플래그 상태
패스이 배열의 어레이를 만들 경우 전달 배열 또는 수 값
베이스를 참조, 하나 개의 플래그는 0 또는 1로 설정이에 기초하여 제어기
에서이 상태를 확인할 수
+0

일반적으로 디자인 오류입니다. 컨트롤러에없는 메소드를 모델에 넣어야합니다. – mark

+0

컨트롤러에서 어떻게 참조합니까? 'var $ uses = 'SubmissionsFavorite '' 그리고 나서'$ this-> SubmissionsFavorite-> methodFromSubmissionsFavoriteModel();'?> –

+0

결코 사용하지 마십시오 :) 대신 ClassRegistry :: init() 또는 loadModel()을 사용하십시오. 추신 : 그 하나는 checkExistingFavorite() 메소드에 대해 더 많이 알아야 할 것입니다. – mark

답변

1

관련 컨트롤러 메소드에서 수행해야합니다. 그렇지 않으면 Cake를 지원하는 MVC 원칙을 위반하게됩니다. Submission 모델에 checkExistingFavorite($userId, $submissionId) 함수를 만들면 모든 컨트롤러 동작에서 사용할 수 있습니다.

당신이 true 또는 false ( $this->set('hasExistingFavourite', $boolean))에 뷰의 변수를 설정할 수 있습니다 ( $this->Submission->checkExistingFavorite()를 호출하여) SubmissionsControllerview() 방법에서 함수를 사용하여 기존의 즐겨 찾기를 확인 후.

+0

오, 좋은! 이제 컨트롤러에서 사용되는 메소드에 대해 Model을 사용하기 시작합니다. 나는 이전에 컨트롤러 내에서 그들을 수행하고있었습니다. 도와 주셔서 감사합니다. –

+0

문제가 없습니다! 이 가이드는 Cake에서 시작했을 때 나에게 커다란 도움이되었으며, "Fat Models, Skinny Controllers"에 대해서도 간략하게 설명합니다. http://bakery.cakephp.org/articles/Auzigog/2008/12/29/ 어디에서해야할까요? – mensch

1

이 조건을
으로 설정하면 비즈니스 로직과 표현 논리가 다름을 알 수 있습니다.

관련 문제