Есть ли обратная сторона для вызова моделей от помощников в CakePHP? - PullRequest
1 голос
/ 26 июня 2011

Немного контекста: мне нужно кэшировать домашнюю страницу моего сайта CakePHP - кроме одной небольшой части, которая отображает события, локальные для пользователя, на основе их IP-адреса.

Очевидно, что вы можете использовать тег для указания части страницы, которая не должна кэшироваться; но вы не можете окружить переменную, заданную контроллером, этими тегами, чтобы сделать ее динамичной. Насколько я знаю, когда страница кэшируется, это все для действия контроллера.

То, что вы можете полезно окружить тегами nocache - это элементы и помощники. Поэтому в этих тегах я создал элемент, который вызывает вспомогательную функцию для доступа к модели и получения соответствующих данных. Чтобы получить модель от помощника, я использую:

$this->Modelname =& ClassRegistry::init("Modelname");

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

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Вместо того, чтобы использовать помощник, попробуйте поместить свой код в элемент и использовать requestAction внутри элемента.

см. Эту ссылку

http://bakery.cakephp.org/articles/gwoo/2007/04/12/creating-reusable-elements-with-requestaction

Thisбыло бы гораздо лучше, чем пытаться использовать модель в вашем помощнике.

0 голосов
/ 27 июня 2011

Кроме нарушения всех тщательно продуманных принципов MVC?

В дополнение к помещению этого элемента в элемент, почему бы не получить его с тривиальным битом ajax?

  1. Поместите вызов в собственное действие контроллера, так что целевой URL -> / controller / action (довольно удобно!)
  2. Передайте IP-адрес этому действию для использования ввызов find
  3. Установить обратный вызов обновления ajax для цели в элементе с результатами вызова соответственно

Нет необходимости обходить вызовы моделей напрямую из Views, и не нужноувязать вещи с requestAction.:)

HTH

...