Свежайшие Пирожки от CakePHP по-русски

Полнейшее руководство CakePHP 1.2 на русском языке, горячие новости и полезные статьи

requestAction

requestAction(string $url, array $options)

Этот метод вызывает действие контроллера в любом месте и возвращает данные из этого действия. Параметр $url - запращиваемый CakePHP-форматированный URL (/controllername/actionname/params). Для передачи дополнительных данных в запрашиваемый контроллер используйте второй параметр - массив $options.

Вы можете использовать requestAction() чтобы получить полностью сгенерированную HTML страницу, если укажите 'return' в опциях: requestAction($url, array('return'));

Если использовать метод requestAction без кеширования, то это может привести к очень низкой производительности. В реальных случаях этот метод не используется ни в контроллере ни в модели.

requestAction лучше всего использовать в сочетании с (кешированными) элементами – как способ извлечения данных для элемента до рендеринга. Давайте используем пример вставки элемента "последние коментарии" в макет. Сначала нам нужно создать метод контроллера, который будет возвращать данные.

Простой текст
  1. // controllers/comments_controller.php
  2. class CommentsController extends AppController {
  3. function latest() {
  4. return $this->Comment->find('all', array('order' => 'Comment.created DESC', 'limit' => 10));
  5. }
  6. }

Создадим простой элемент, который будет вызывать эту функцию:

Простой текст
  1. // views/elements/latest_comments.ctp
  2. $comments = $this->requestAction('/comments/latest');
  3. foreach($comments as $comment) {
  4. echo $comment['Comment']['title'];
  5. }

Мы можем теперь вставить элемент где захотим, для отображения на странице:

Простой текст
  1. echo $this->element('latest_comments');

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

Простой текст
  1. echo $this->element('latest_comments', array('cache'=>'+1 hour'));

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

Кроме того, в настоящее время requestAction не принимает cake urls(массивное представление):

Простой текст
  1. echo $this->requestAction(array('controller' => 'articles', 'action' => 'featured'), array('return'));