cakephp где мне вызвать глобальную функцию, которая нужна каждой странице

#cakephp #cookies

#cakephp #файлы cookie

Вопрос:

Я использую CakePHP (2.2, я думаю) и изо всех сил пытаюсь понять, куда поместить функцию. Это функция, которая вызывается при каждой загрузке страницы. Основная логика такова

Запрашиваемая страница загружает шаблон страницы, загружает включенный заголовок, чтобы проверить, был ли установлен cookie. Если cookie установлен, используйте значения в этом, если cookie не был установлен, загрузите значение из базы данных и сохраните в cookie сохраните значения cookie в качестве значения конфигурации для использования на странице продолжить загрузку страницы

В основном функция заключается в установке значений конфигурации. Я попытался создать помощник, который прекрасно работал, когда я вызывал его в представлении заголовка, но как только я попытался получить доступ к cookie helper, он не сработал.

Я перенес код в контроллер приложения и вызвал его с помощью функции beforefilter (), но, похоже, она вызывается несколько раз на одной странице (хотя на самом деле все работает нормально).

Итак, где бы я разместил функцию для выполнения этого, чтобы она вызывалась до того, как какой-либо HTML-код выводится на экран и вызывается только один раз?

Большое спасибо, Мэтт.

Комментарии:

1. вы пробовали поместить ее в функцию beforeRender в AppController?

2. Да — это сделало свое дело, спасибо! Вы хотите добавить в качестве ответа, и я сделаю так же правильно, как вы ответили сначала!

Ответ №1:

beforeFilter ваше AppController.php находится в нужном месте. beforeRender также должно работать, как упоминал @zynder.

beforeFilter безусловно, Cake должен вызываться только один раз за запрос. Если она работает в beforeFilter , но вызывается более одного раза, вы, вероятно, сделали что-то не так, и вам следует разобраться в этом. Или, может быть, вы ошибаетесь, думая, что она выполняется более одного раза за запрос.

Как вы думаете, почему beforeFilter вызывается более одного раза?

Комментарии:

1. Спасибо — я видел ошибку из моего кода beforeFilter () в трех разных местах на веб-сайте. Я полагаю, что там будет какая-то другая проблема, как вы сказали. На данный момент я поместил код в beforeRender, который, кажется, работает нормально. Спасибо.