CakePHP: Могу ли я создать функцию в контроллере, у которого нет связанного представления? - PullRequest
0 голосов
/ 10 октября 2010

У меня есть действие index в моем users_controller, которое получает список пользователей.Для каждого пользователя я хочу рассчитать количество проектов, которые они связали (один пользователь => много проектов).Я думал об использовании метода, такого как getProjectTotal, и вызывал его для каждого пользователя.Я бы положил этот метод в users_controller и назову его как

$this->getProjectTotal($id) 

в представлении?

Спасибо,

Джонси

Ответы [ 3 ]

2 голосов
/ 10 октября 2010

Конечно. Похоже, это просто вспомогательный метод, основанный на вызове. Я делаю это все время. Обычно я устанавливаю видимость метода как приватную или, по крайней мере, защищенную, чтобы избежать случайного вызова в сценарии рендеринга.

1 голос
/ 10 октября 2010

Я все еще относительно новичок в CakePHP, но я использую встроенный counterCache в Cake 1.2 для отслеживания количества записей hasMany для родительской Модели в одном из моих приложений.Создайте поле в вашей родительской модели для хранения счетчика hasMany и включите counterCache в свойстве $ ownTo для дочерней модели, и все готово.Он автоматически обновляет поле счетчика counterCache в родительской модели всякий раз, когда число записей hasMany увеличивается / уменьшается.Мне нравится этот метод отслеживания, так как он делает контроллер немного чище, если все, что вам нужно, это счет без каких-либо других условий.

Документы: http://book.cakephp.org/view/816/counterCache-Cache-your-count

Кроме того, я все еще новичокв MVC, но я думаю, что если вы собираетесь собирать счет с помощью частного / защищенного метода контроллера, вы хотите вызвать его в контроллере и затем отправить данные в представление, а не выполнять фактический метод из представленияв этом сценарии.

0 голосов
/ 12 октября 2010

Также - да, вы можете создать метод контроллера для работы, которая не будет отображать представление - НО - в вашем случае вы должны использовать функцию counterCache / a Model, так как вы либо выбираете / подсчитываете/ манипулирование фактическими данными, относящимися к модели проекта и ее связи с моделью пользователя и текущим пользователем, вошедшим в систему.вызывается из requestAction.Если метод является вычислительным или устанавливает переменные, но не требует шаблона или не вызывается из элемента, я перемещаю его в компонент / помощник / модель / поведение.В сочетании с docblock с @requestAction в флагах для самоанализа, я могу получить список обычных действий и действий, возвращающих данные, не беспокоясь о том, что контроллер полон других методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...