set() метод – это основной способ передачи данных из контроллера в отображение. После вызова функции set() указанная переменная будет доступна в отображении.
<?php
//Сначала вы передаете данные из контроллера:
$this->set('color', 'розовую');
//Затем, в отображении вы можете использовать данные:
?>
Вы выбрали <?php echo $color; ?> сахарную глазурь для кекса.
Функция set() также может принимать массив в качестве первого параметра. Часто это может быть быстрым способом для передачи большого количества информации в отображение.
Индексы массива будут преобразованы при передаче в отображение
('underscored_key' станет 'underscoredKey', и т.д.):
<?php
$data = array(
'color' => 'розовый',
'type' => 'сахар',
'base_price' => 23.95
);
//сделаем $color, $type, and $basePrice
//доступными в отображении:
$this->set($data);
?>
Функция render() автоматически вызывается в конце каждого запрошенного действия контроллера. Этот метод выполняет вывод отображения (используя данные, которые вы передали с помощью функции set()), размещает отображение внутри макета и выводит его для пользователя.
Файл отображения по умолчанию, используемый функцией render(), определен соглашением. Если запрошено действие search() контроллера RecipesController, то файл отображения в /app/views/recipes/search.ctp будет визуализирован.
class RecipesController extends AppController {
...
function search() {
// Рендерит отображение /views/recipes/search.ctp
$this->render();
}
...
}
CakePHP будет автоматически вызывать render после каждого действия (пока не установите $this->autoRender = false). Вы можете использовать это для назначения альтернативного файла отображения, присвоив в контроллере переменной $action нужное имя действия.
Если $action начинается с '/', значит предполагается файл отображения из каталога /app/views. Это позволяет напрямую рендерить элементы, что очень полезно при ajax вызовах.
// Рендерит элемент в /views/elements/ajaxreturn.ctp
$this->render('/elements/ajaxreturn');
Вы так же можете определить другой файл отображения, используя третий параметр $file. Когда используете $file, не забывайте употреблять глобальные константы CakePHP (например, VIEWS).
Параметр $layout позволяет определить макет в который будет рендериться отображение.
Метод, который вы будете использовать чаще всего – это redirect(). Эта функция берет первый параметр в виде родственного CakePHP URL.
Когда пользователь успешно выполнил заказ, вы возможно пожелаете перенаправить его в окно с информацией о получении продукции.
function placeOrder() {
//Логика завершения заказа представлена здесь
if($success) {
$this->redirect(array('controller' => 'orders', 'action' => 'thanks'));
} else {
$this->redirect(array('controller' => 'orders', 'action' => 'confirm'));
}
}
Второй параметр redirect() позволяет вам определить HTTP статус-код, сопровождающий перенаправление. Возможно, вы захотите использовать 301 (удален навсегда) или 303 (смотри другое), в зависимости от вида перенаправления.
Метод будет выполнять exit() после перенаправления, пока вы не передаете третьим параметром false.
Подобно redirect(), функция flash() используется для направления пользователя на новую страницу после выполнения операции. Отличие flash() в том, что он показывает сообщение перед отправлением пользователя по другому URL.
Первый параметр должен содержать сообщение, которое требуется вывесли. Второй параметр – CakePHP-родственный URL. CakePHP выведет $message на $pause секунд перед перенаправлением пользователя.
Для внутристраничных flash-сообщений смотрите SessionComponent setFlash() функцию.