requestAction
requestAction(string $url, array $options)
Этот метод вызывает действие контроллера в любом месте и возвращает данные из этого действия. Параметр $url - запращиваемый CakePHP-форматированный URL (/controllername/actionname/params). Для передачи дополнительных данных в запрашиваемый контроллер используйте второй параметр - массив $options.
Вы можете использовать requestAction() чтобы получить полностью сгенерированную HTML страницу, если укажите 'return' в опциях: requestAction($url, array('return'));
Если использовать метод requestAction без кеширования, то это может привести к очень низкой производительности. В реальных случаях этот метод не используется ни в контроллере ни в модели.
requestAction лучше всего использовать в сочетании с (кешированными) элементами – как способ извлечения данных для элемента до рендеринга. Давайте используем пример вставки элемента "последние коментарии" в макет. Сначала нам нужно создать метод контроллера, который будет возвращать данные.
// controllers/comments_controller.phpclass CommentsController extends AppController {function latest() {return $this->Comment->find('all', array('order' => 'Comment.created DESC', 'limit' => 10));}}
Создадим простой элемент, который будет вызывать эту функцию:
Простой текст// views/elements/latest_comments.ctp$comments = $this->requestAction('/comments/latest');foreach($comments as $comment) {echo $comment['Comment']['title'];}
Мы можем теперь вставить элемент где захотим, для отображения на странице:
Простой текстecho $this->element('latest_comments');
Таким образом, всякий раз, когда элемент будет рендерится, будет осуществляться запрос к контроллеру, для получения данных.Однако в соответствии с предупреждением выше, лучше использовать элемент кэширования для предотвращения ненужных обработок. После изменения вызов элемента должен выглядеть следующим образом:
Простой текстecho $this->element('latest_comments', array('cache'=>'+1 hour'));
Вызов requestAction не будет происходить пока есть кеш элемента и этот кеш валидный.
Кроме того, в настоящее время requestAction не принимает cake urls(массивное представление):
Простой текстecho $this->requestAction(array('controller' => 'articles', 'action' => 'featured'), array('return'));


Коментарии:
Добавить коментарий