Первое, с чем мы разберемся - это контроллеры. Контроллеры обрабатывают запросы пользователя, понимают, что хотел попросить пользователь у сайта, просят соответствующие данные из модели и отправляют их в представление.
Контроллеры представляют собой ООП классы.
Один файл - это один класс и, соответственно,
один контроллер. В нашем фреймворке контроллеры
будут храниться в папке project/controllers
.
Давайте потренируемся в создании контроллеров.
Для разминки сделаем класс PageController
,
который будет управлять текстовыми страницами
на нашем сайте.
Давайте сразу создадим файл для нашего контроллера.
По правилам нашего фреймворка каждый класс
должен хранится в файле с одноименным названием
(вплоть до регистра). То есть наш класс PageController
будет хранится в файле PageController.php
.
Создайте этот файл в папке project/controllers
.
Сделаем в этом файле наш класс:
<?php
namespace Project\Controllers;
use \Core\Controller;
class PageController extends Controller
{
}
?>
Как вы видите, наш класс принадлежит пространству
имен Project\Controllers
, следуя соглашению
об автозагрузке файлов (то есть путь по папкам
должен совпадать с пространством имен).
Кроме того, наш класс наследуется от класса
Core\Controller
, находящегося в ядре
фреймворка. В этом не нужно искать глубокий
смысл, а просто нужно принять как правило
фреймворка. Вот это правило: все создаваемые
вами контроллеры должны наследоваться от
класса Core\Controller
, чтобы все
работало, как надо.
Действия
Добавим теперь в наш контроллер методы класса.
В терминах MVC методы контроллеров называются
действиями (англ. actions).
Сделаем, например, два действия - show1
и show2
, и в каждом действии выведем
что-нибудь на экран:
<?php
namespace Project\Controllers;
use \Core\Controller;
class PageController extends Controller
{
public function show1()
{
echo '1';
}
public function show2()
{
echo '2';
}
}
?>
Роутинг
Теперь вам необходимо познакомиться с таким понятием, как роутинг. Он представляет собой механизм, с помощью которого можно вызывать определенное действие определенного контроллера через адресную строку браузера.
Настройки роутинга хранятся в файле /project/config/routes.php
и представляют собой массив объектов класса
\Core\Route
. Конструктор этого класса
первым параметром принимает URI, по запросу
которого вызовется соответствующий метод
соответствующего контроллера. Имя контроллера
и имя действия задаются вторым и третьим
параметрами. При этом имя контроллера задается
с маленькой буквы.
Давайте для примера добавим два роута (то
есть маршрута): первый при обращении к адресу
/my-page1/
будет вызывать метод
show1
контроллера page
, а второй
- метод show2
этого же контроллера:
<?php
use \Core\Route;
return [
new Route('/my-page1/', 'page', 'show1'),
new Route('/my-page2/', 'page', 'show2'),
];
?>
Практические задачи
Сделайте контроллер TestController
с действиями act1
, act2
и act3
.
Сделайте три роута, задающие адреса, по которым
можно будет обратиться к этим действиям.
Проверьте работу созданного вами кода, по
очереди обратившись через адресную строку
к каждому из действий.