Создание любой страницы на Symfony это процесс создания:
- Роута (Route) - это URL адрес страницы, например, /contacts
- Контроллера (Controller) - это PHP функция или метод класса, которые описывает бизнес логику страницы. Посколько Symfony реализует HTTP Request-Response Lifecycle, котроллер принимает объект запроса (Request) и в конце возвращает объект ответа (Response)
Создаем первую страницу
Перед началом у вас должно быть установлено базовое Symfony 4 приложение. Процесс установки описан в статье.
Давайте добавим к нашему приложению страницу с адресом /about. Первое, что нам понадобится - это контроллер:
<?php
# src/Controller/IndexController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class IndexController
{
public function about()
{
$responseContent = <<<HTML
<html>
<head>
<title>About us</title>
</head>
<body>
<h1>About us</h1>
<p>Content of the about page</p>
</body>
</html>
HTML;
return new Response($responseContent);
}
}
Далее создаем роут для нашего нового контроллера. Для этого открываем файл config/routes.yaml:
# config/routes.yaml
# имя роута здесь не важно, называем согласно логике и желанию
about_page:
path: /about
controller: App\Controller\IndexController::about
Если вы все сделали правильно, при открытии страницы http://localhost:8000/about вы должны увидеть страницу:
Мы создали описание роута в конфиге, но теперь давайте посмотрим на более удобный способ - использование аннотаций (annotations):
# установим дополнительный пакет
$ composer require annotations
После установки пакета аннотаций можем указывать роуты прямо в контроллере:
<?php
# src/Controller/IndexController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
+ use Symfony\Component\Routing\Annotation\Route;
class IndexController
{
+ /**
+ * @Route("/about", name="about_page")
+ */
public function about()
{
$responseContent = <<<HTML
<html>
<head>
<title>About us</title>
</head>
<body>
<h1>About us</h1>
<p>Content of the about page</p>
</body>
</html>
HTML;
return new Response($responseContent);
}
}
Все должно работать в точности также как раньше! Роуты - это мощный инструмент, который заслуживает отдельного рассмотрения.
Рендер шаблонов
Symfony поставляется в тандеме с шаблонизатором Twig. Он удобен, прост в использовании, поэтому логичнее использовать его для отображения верстки, а не хранить шаблоны прямо в контроллере. Для использования Twig убедитесь, что ваш контроллер наследует AbstractController:
<?php
# src/Controller/IndexController.php
namespace App\Controller;
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
/**
* @Route("/about", name="about_page")
*/
public function about()
{
- $responseContent = <<<HTML
-<html>
- <head>
- <title>About us</title>
- </head>
- <body>
- <h1>About us</h1>
- <p>Content of the about page</p>
- </body>
- </html>
- HTML;
-
- return new Response($responseContent);
+ return $this->render('index/about.html.twig');
}
}
Шаблоны находятся в директории templates/. Создадим шаблон и поместим в него HTML код, удаленный из контроллера:
<!-- templates/index/about.html.twig -->
<html>
<head>
<title>About us</title>
</head>
<body>
<h1>About us</h1>
<p>Content of the about page</p>
</body>
</html>
Вот и все, первая страница создана. Далее мы поговорим о не менее важных вещах, необходимых в разработке проектов на Symfony.