Пользователям PHP4 определение контроллеров следует начинать с использования переменной $name. Этой переменной должно быть присвоено имя контроллера. Обычно, это множественное число имени основной модели, которую использует контроллер. Это поможет CakePHP разобраться с именованием.
<?php
# пример использования переменной $name
class RecipesController extends AppController {
var $name = 'Recipes';
}
?>
Следующие, наиболее часто используемые переменные, скажут CakePHP какие компоненты, хелперы и модели вы будете использовать в связке с текущим контроллером. Использование этих переменных сделает эти MVC классы доступными для контроллера, как переменные класса ($this->ModelName, например).
Контроллер имеет доступ по умолчанию к его основной модели. Наш RecipesController будет иметь доступ к модели Recipe таким образом $this->Recipe. Однако, если подключаете к контроллеру дополнительные модели через переменную $uses, то имя основной модели текущего контроллера так же должно быть указано. Это проиллюстрировано в примере ниже.
Html, Form, и Session хелперы всегда доступны по умолчанию, как SessionComponent. Далее в руководстве мы узнаем больше об этих классах.
Давайте посмотрим как сказать контроллеру CakePHP, что вы собираетесь использовать дополнительные MVC классы.
<?php
class RecipesController extends AppController {
var $name = 'Recipes';
var $uses = array('Recipe', 'User');
var $helpers = array('Ajax');
var $components = array('Email');
}
?>
Каждая из этих переменных соединена с их унаследованными значениями. Таким образом, нет необходимости переопределять, например Form хелпер или что-то другое, что определено в вашем App контроллере.
В контроллере CakePHP существует несколько переменных, которые дают вам контроль над отображением внутри макета (layout).
Переменной $layout может быть присвоено имя макета, сохраненного в /app/views/layouts. Вы назначаете макет присвоением переменной $layout имени файла макета без расширения .ctp. Если эта переменная не определена, то CakePHP будет вызывать макет по умолчанию default.ctp. А если нет файла /app/views/layouts/default.ctp, то будет использоваться макет ядра CakePHP по умолчанию.
<?php
// Использование переменной $layout для назначения альтернативного макета
class RecipesController extends AppController {
function quickSave() {
$this->layout = 'ajax';
}
}
?>
Используя $pageTitle вы можете изменить заголовок страницы (который выводится на панели вверху вашего браузера). Для того, чтобы это работало, в вашем макете должна быть переменная $title_for_layout между тегами <title> и </title> в заголовке HTML документа.
<?php
// Использование $pageTitle для определения заголовка страницы
class RecipesController extends AppController {
function quickSave() {
$this->pageTitle = 'SEO заголовок';
}
}
?>
Вы так же можете назначить заголовок страницы в отображении, используя $this->pageTitle (Вы должны использовать $this-> part.) Рекомендуется так делать для разделения логики и отображения. Для статической страницы вы должны использовать $this->pageTitle в отображении, если хотите специальный заголовок.
Если $this->pageTitle не назначен, то заголовок сгенерируется автоматически на основании имени контроллера или имени файла отображения в случае статической страницы.
Параметры контроллера доступны через $this->params в вашем контроллере CakePHP. Эта переменная используется для предоставления доступа к информации о текущем запросе. Стандартное использование $this->params – получение доступа к информации, передаваемой в контроллер через через POST или GET операции.