-
Notifications
You must be signed in to change notification settings - Fork 39
Controller
Буковка C из MVC, вот только нет для него никакого класса прародителя, всё куда как проще.
Нет
Для создания своего контроллера (понятие action нет в Bluz) необходимо создать файл с анонимной функцией в директории модуля application/modules/%module%/controllers/%controller%.php
:
// application/modules/%module%/controllers/%controller%.php
// return!!!
return
function () {
};
Директива
return
обязательна, ведь вызываяinclude
данного файла мы должны поймать нашу анонимную функцию
Теперь создадим шаблон для view - application/modules/%module%/views/%controller%.phtml
:
<!-- application/modules/%module%/views/%controller%.phtml -->
<h2>Hello!</h2>
Всё - URL должен ожить /%module%/%controller%/
Магия - мы можем получать параметры запросов как входящие параметры функции-контроллера:
return
function ($id, $text) {
echo $id;
echo $text;
};
Так же можем явно указать тип входных параметров используя PHPDoc:
/**
* @param integer $id
* @param string $text
*/
return function ($id, $text) {
// integer
echo $id;
// string
echo $text;
};
с версии 7.0.0
Класс Controller\Controller
отвечает за подключение анонимной функции, и все остальные плюшки описанные в данном разделе руководства.
При запуске контроллера, формируется набор данных Controller\Data, который в дальнейшем попадёт в ответ сервера, в каком виде - за это уже отвечает класс Response.
Из анонимной функции к классу можно обращаться как к $this
.
Для кеширования результирующих данных достаточно в комментариях к контроллеру прописать @cache 5 min
- таким образом результирующий Controller\Data будет кешироваться на 5 минут используя в качестве ключа текущие входные параметры (так же поддерживается указание часов (hour/s) и дней (day/s)).
/**
* @cache 5 min
* @param integer $id
*/
return function($id) use () {
};
Если ваш контроллер вернёт false
, то таким образом вы отключите использование шаблонизатора (подобный результат не кешируется):
return
function() {
// do something
return false;
};
Если ваш контроллер вернёт массив данных, то система посчитает, что эти данные необходимо занести в Data
:
return
function() {
// do something
return ['foo' => 'bar'];
};
Если ваш контроллер вернёт строку, до это будет эквивалентно вызову метода setTemplate()
для View
:
return
function() {
return 'another.phtml';
};
с версии 0.9.1
Для автоматического форматирования View в JSON в блоке описания следует указать:
/**
* @accept JSON
*/
Таким образом, система найдя в заголовках запроса типа Accept: application/json
автоматически преобразует вывод в JSON.
Если ваш контроллер должен поддерживать и HTML и JSON:
/**
* @accept HTML
* @accept JSON
*/
с версии 7.0.0
Бросает исключение ForbiddenException
Синтаксис:
function () {
$this->denied();
}
Отключение (Layout)[Layout]
Синтаксис:
function () {
$this->disableLayout();
}
Отключение (View)[View]
Синтаксис:
function () {
$this->disableView();
}
Вызов другого контроллера:
Синтаксис:
function () {
$this->dispatch($module, $controller, $params) ;
}
Отдельно стоит заметить, что таким способом можно вызвать контроллер вложенный в подпапку, который иначе нельзя выполнить:
function () {
$templateController = $this->dispatch('users', 'mail/template', ['template' => 'recovery']);
$htmlResult = $templateController->render();
}
Проверка прав доступа по указанной привилегии в текущем модуле:
Синтаксис:
/**
* @acl Delete
*/
return function () {
if (!$this->isAllowed('Delete')) {
$this->denied();
}
}
Принудительное переключение вывода в JSON формат:
Синтаксис:
function () {
$this->useJson();
}
Переключение Layout'а:
Синтаксис:
function () {
$this->useLayout('small.phtml');
}
Возвращает текущего пользователя, если таковой есть.
Синтаксис:
function () {
$this->user();
}
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View