Лаб. работа "Шаблоны и представления в Symfony"

Лабораторная работа будет посвящена изучению основных принципов работы с шаблонами и представлениями в фреймворке Symfony.

Цель работы:

  • Изучить основные принципы работы с шаблонами и представлениями в Symfony
  • Научиться создавать и использовать шаблоны в Symfony
  • Научиться создавать и использовать представления в Symfony
  • Научиться использовать встроенные хелперы в шаблонах и представлениях

Задания:

  1. Создайте новый проект Symfony с помощью композера.
  2. Создайте новый контроллер и действие в нем, которое будет возвращать простую строку.
  3. Создайте новый шаблон для этого действия и выведите в нем переменную, переданную из контроллера.
  4. Используя встроенные хелперы, добавьте в шаблон ссылку на другое действие контроллера.
  5. Создайте новое представление, которое будет использовать созданный ранее шаблон.
  6. Добавьте в представление блок с условием, который будет отображаться только в случае, если переменная, переданная из контроллера, равна определенному значению.
  7. Добавьте в представление цикл, который будет выводить список элементов, переданных из контроллера.
  8. Создайте новый шаблон, который будет использоваться для отображения ошибок.
  9. Добавьте в контроллер действие, которое будет генерировать исключение, и проверьте, что при генерации исключения будет отображаться созданный вами шаблон ошибок.

Результаты работы:

  • Новый проект Symfony
  • Новый контроллер и действие
  • Новый шаблон
  • Новое представление
  • Использование встроенных хелперов в шаблонах и представлениях
  • Блок с условием в представлении
  • Цикл в представлении
  • Шаблон ошибок
  • Действие, генерирующее исключение

Основные команды:

  • Создание нового проекта Symfony:
1composer create-project symfony/website-skeleton my_project
  • Создание нового контроллера:
 1// src/Controller/MyController.php
 2
 3namespace App\Controller;
 4
 5use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 6use Symfony\Component\Routing\Annotation\Route;
 7
 8class MyController extends AbstractController
 9{
10    /**
11     * @Route("/my", name="my")
12     */
13    public function index()
14    {
15        return $this->render('my/index.html.twig', [
16            'controller_name' => 'MyController',
17        ]);
18    }
19}
  • Создание нового шаблона:
1{# templates/my/index.html.twig #}
2
3<h1>My page</h1>
4
5<p>{{ controller_name }}</p>
  • Использование встроенных хелперов:
1{# templates/my/index.html.twig #}
2
3<h1>My page</h1>
4
5<p>{{ controller_name }}</p>
6
7<a href="{{ path('my_other') }}">Go to other page</a>
  • Создание нового представления:
 1// src/Controller/MyController.php
 2
 3namespace App\Controller;
 4
 5use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 6use Symfony\Component\Routing\Annotation\Route;
 7
 8class MyController extends AbstractController
 9{
10    /**
11     * @Route("/my", name="my")
12     */
13    public function index()
14    {
15        $var = 'value';
16
17        return $this->render('my/index.html.twig', [
18            'controller_name' => 'MyController',
19            'var' => $var,
20        ]);
21    }
22
23    /**
24     * @Route("/my/other", name="my_other")
25     */
26    public function other()
27    {
28        return $this->render('my/other.html.twig');
29    }
30}
  • Блок с условием в представлении:
 1{# templates/my/index.html.twig #}
 2
 3<h1>My page</h1>
 4
 5<p>{{ controller_name }}</p>
 6
 7{% if var == 'value' %}
 8    <p>Variable is equal to "value"</p>
 9{% endif %}
10
11<a href="{{ path('my_other') }}">Go to other page</a>
  • Цикл в представлении:
 1{# templates/my/index.html.twig #}
 2
 3<h1>My page</h1>
 4
 5<p>{{ controller_name }}</p>
 6
 7{% for item in items %}
 8    <p>{{ item }}</p>
 9{% endfor %}
10
11<a href="{{ path('my_other') }}">Go to other page</a>
  • Шаблон ошибок:
1{# templates/bundles/TwigBundle/Exception/error.html.twig #}
2
3<h1>Error {{ status_code }} - {{ status_text }}</h1>
4
5<p>{{ message }}</p>
  • Действие, генерирующее исключение:
 1// src/Controller/MyController.php
 2
 3namespace App\Controller;
 4
 5use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 6use Symfony\Component\Routing\Annotation\Route;
 7use Symfony\Component\HttpFoundation\Response;
 8
 9class MyController extends AbstractController
10{
11    // ...
12
13    /**
14     * @Route("/my/error", name="my_error")
15     */
16    public function error()
17    {
18        throw new \Exception('Error!');
19    }
20}

Дополнительные материалы:

← Лаб. работа "Основы Symfony" Лаб. работа "Работа с базами данных в … →