CakePHP: Manual/Developing/Controllers/Attributes

Переменные контроллера


$name

Пользователям PHP4 определение контроллеров следует начинать с использования переменной $name. Этой переменной должно быть присвоено имя контроллера. Обычно, это множественное число имени основной модели, которую использует контроллер. Это поможет CakePHP разобраться с именованием.

<?php

#   пример использования переменной $name 

class RecipesController extends AppController {

   var $name 'Recipes';

}

?>


$components, $helpers и $uses

Следующие, наиболее часто используемые переменные, скажут 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 контроллере.


$layout и $pageTitle

В контроллере 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 не назначен, то заголовок сгенерируется автоматически на основании имени контроллера или имени файла отображения в случае статической страницы.


$params

Параметры контроллера доступны через $this->params в вашем контроллере CakePHP. Эта переменная используется для предоставления доступа к информации о текущем запросе. Стандартное использование $this->params – получение доступа к информации, передаваемой в контроллер через POST или GET операции.

form

$this->params['form']

Любые POST данные из любой формы хранятся здесь, включая информацию из $_FILES.

admin

$this->params['admin']

Установлен в 1, если текущее действие вызывается через админ роут (маршрутизация).

bare

$this->params['bare']

Хранит 1, если текущий макет (layout) пуст, и 0, если не пуст.

isAjax

this->params['ajax']

Хранит 1, если текущий запрос – это ajax вызов и 0, если не ajax. Эта переменная получает значение только в том случае, если RequestHandler компонент используется в контроллере.

controller

$this->params['controller']

Содержит имя текущего контроллера, обрабатывающего запрос. Например, если URL /posts/view/1 был запрошен, $this->params['controller'] будет равно “posts”.

action

$this->params['action']

Содержит имя текущего действия, обрабатывающего запрос. Например, если URL /posts/view/1 был запрошен, $this->params['action'] будет равно “view”.

pass

$this->params['pass']

Содержит строку GET запроса, переданную с текущим запросом. Например, если URL /posts/view/?var1=3&var2=4 был запрошен, $this->params['pass'] будет равно "?var1=3&var2=4".

url

$this->params['url']

Содержит текущий URL запрос, вместе с именами и значениями get-переменных. Например, если URL /posts/view/?var1=3&var2=4 был запрошен, $this->params['url'] будет содержать:

[url] => Array

(

    [url] => posts/view

    [var1] => 3

    [var2] => 4

)


data

$this->data

Используется для обработки POST данных, переданных от FormHelper форм в контроллер.

// FormHelper использется для создания элемента формы:

$form->text('User.first_name');

После обработки это выглядит так:

<input name="data[User][first_name]" value="" type="text" />

Когда данные отправлены в контроллер через POST их можно взять в $this->data

//Отправленное first name будет найдено здесь:

$this->data['User']['first_name'];


prefix

$this->params['prefix']

Хранит префикс роута (маршрута). Например, переменная будет содержать строку “admin” при запросе /admin/posts/someaction.


named

$this->params['named']

Содержит все именованные параметры из строки url запроса в виде /key:value/. Например, если URL /posts/view/var1:3/var2:4 был запрошен, $this->params['named'] будет массивом, содержащим:

[named] => Array

(

    [var1] => 3

    [var2] => 4

)


Другие переменные

$cacheAction переменная помогает в кэшировании отображений.

$paginate переменная используется для разбиения на страницы.

Для получения дополнительной информации по использованию этих переменных читайте соответствующие разделы далее в этом руководстве.

<< Контроллеры-Введение | Методы контроллера >>