Vse o WEB
Информация и размышления о Web технологиях

Первая страница на Symfony

Создание любой страницы на Symfony это процесс создания:

  1. Роута (Route) - это URL адрес страницы, например, /contacts
  2. Контроллера (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 вы должны увидеть страницу:

 

First Symfony4 page

 

Мы создали описание роута в конфиге, но теперь давайте посмотрим на более удобный способ - использование аннотаций (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.

Наверх