Fork me on GitHub

Контроллеры

Используются для обработки запросов от клиента и решают ряд задач:

  • Обработка ошибок (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');
}