кеширование контроллера через пользовательские маршруты - PullRequest
1 голос
/ 28 апреля 2011

Привет, Моя цель - получить сгенерированную или кэшированную версию страницы с использованием пользовательских маршрутов.

Для этого я создал второй пользовательский маршрут для того же контроллера.

Router::connect('/get/*', array('controller' => 'mycontroller', 'action' => 'myaction'));
Router::connect('/getnocache/*', array('controller' => 'mycontroller', 'action' => 'myaction'));

Проблема заключается в том, что $ cacheAction игнорирует это (ничего не кэширует):

var $cacheAction = array(
    'get/*' => '1 hour'
);

При использовании $ cacheAction обычно все запросы кэшируются:

var $cacheAction = '1 hour';

Я что-то упускаю или это просто невозможно?

1 Ответ

2 голосов
/ 28 апреля 2011

Не рекомендуется создавать две разные ссылки для одной и той же информации контроллера / действия / параметров.Вы не столкнетесь с проблемами при запросе страницы, но если вы используете CakePHP для создания ссылки, она всегда будет использовать первое совпадение, поэтому вы всегда получите / get / * url.

Однако, естьэто решение.Вы можете просто указать больше элементов во втором параметре:

Router::connect('/get/*', array(
    'controller' => 'mycontroller', 
    'action' => 'myaction', 'useCache' => true
));

Router::connect('/getnocache/*', array(
    'controller' => 'mycontroller', 
    'action' => 'myaction', 'useCache' => false
));

На основе дополнительного параметра вы можете легко решить, следует ли кэшировать запрос.Я не уверен, как именно вы можете получить доступ к этому параметру в контроллере (прошло много времени с тех пор, как я последний раз использовал CakePHP), но я знаю, что это возможно.Это, вероятно, что-то вроде $this->params['useCache'] в контроллере.

...