Вызов метода контроллера из представления CakePHP - PullRequest
0 голосов
/ 05 марта 2012

Мне было интересно, как лучше всего это сделать. У меня есть SubmissionsController и внутри него, метод view (), который является отображением для каждой отправки. У всех представленных материалов есть избранные, и пользователи могут голосовать за них. Я хочу изменить значок в зависимости от того, голосовал ли пользователь ранее или нет. Я думал о том, чтобы сделать что-то вроде этого:

// 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 напрямую из моего поля зрения. Мой вопрос, каков наилучший способ справиться с этим? Это нужно проверять каждый раз, когда пользователь просматривает представление, поэтому я не уверен, стоит ли мне вообще кешировать это?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Это должно быть сделано в соответствующем методе контроллера, иначе вы нарушите принципы MVC, лежащие в основе Cake. Вы можете создать функцию checkExistingFavorite($userId, $submissionId) в вашей модели Submission, чтобы она была доступна для всех действий контроллера.

После проверки существующих фаворитов, используя функцию в методе view(), равном SubmissionsController (вызывая $this->Submission->checkExistingFavorite()), вы можете установить переменную для представления на true или false ($this->set('hasExistingFavourite', $boolean)).

1 голос
/ 05 марта 2012

Вы можете проверить это условие в контроллере
на основе этого набора один флаг 0 ИЛИ 1, если несколько данных, тогда создать массив статуса флага
передать этот массив для просмотра
На основании переданного массива ИЛИ вы можете установить это условие
таким образом, мы можем достичь того, что бизнес-логика и логика представления отличаются

...