Контроллеры
Используются для обработки запросов от клиента и решают ряд задач:
- Обработка ошибок (
app/Controllers/ErrorController.php
) - Общие задачи: смена языка, смена цветовой схемы, лицензия, readme (
app/Controllers/IndexController.php
) - Управление блогом (
app/Controllers/BlogController.php
) - Регистрация, аутентификация и авторизация пользователей (
app/Controllers/SecurityController.php
) - Управление списком задач (
app/Controllers/TodoController.php
) - Тестирование работы сервиса UBKI (
app/Controllers/UbkiController.php
) - Демонстрация некоторых возможностей (
app/Controllers/TestController.php
)
Все эти контроллеры, наследуют общий класс BaseController app/Controllers/BaseController.php
, который определяет общие методы для всех контроллеров.
Создание и инициализация
Создание и инициализация контроллеров происходит в классе Bootstrap app/Bootstrap.php
с помощью метода _iniControllers.
/**
* Initialization controllers
*
* @param Application $app
*/
private function _iniControllers(Application $app) {
...
// Load controllers
foreach ($app['config']['controllers'] as $controllerServiceName => $controllerClass) {
$app[$controllerServiceName] = $app->share(function () use ($app, $controllerClass) {
return new $controllerClass($app);
});
$controller = $app[$controllerServiceName];
}
}
Список классов контроллеров находиться в файле app/Resources/Config/parameters.yml
.
При создании контроллера происходит инициализация маршрутов для вызова соответствующего контроллера и его действия при запросе от клиента.
public function __construct(Application $app) {
$this->app = $app;
$this->iniRoutes();
}
Например для контроллера TodoController инициализация маршрутов будет выглядеть так:
/**
* Routes initialization
*
* @return void
*/
protected function iniRoutes() {
$self = $this;
$this->app->get('/todo', function () use ($self) {
return $self->indexAction();
})->bind('todo');
$this->app->post('/tasks', function () use ($self) {
return $self->createAction();
})->bind('task_create');
$this->app->get('/tasks/{id}', function ($id) use ($self) {
return $self->readAction($id);
})->bind('task_read ');
$this->app->get('/tasks', function () use ($self) {
return $self->readAction();
})->bind('tasks_all ');
$this->app->put('/tasks/{id}', function ($id) use ($self) {
return $self->updateAction($id);
})->bind('task_update');
$this->app->delete('/tasks/{id}', function ($id) use ($self) {
return $self->deleteAction($id);
})->bind('task_delete');
}