Лаб. работа "Шаблоны и представления в Symfony"
Лабораторная работа будет посвящена изучению основных принципов работы с шаблонами и представлениями в фреймворке Symfony.
Цель работы:
- Изучить основные принципы работы с шаблонами и представлениями в Symfony
- Научиться создавать и использовать шаблоны в Symfony
- Научиться создавать и использовать представления в Symfony
- Научиться использовать встроенные хелперы в шаблонах и представлениях
Задания:
- Создайте новый проект Symfony с помощью композера.
- Создайте новый контроллер и действие в нем, которое будет возвращать простую строку.
- Создайте новый шаблон для этого действия и выведите в нем переменную, переданную из контроллера.
- Используя встроенные хелперы, добавьте в шаблон ссылку на другое действие контроллера.
- Создайте новое представление, которое будет использовать созданный ранее шаблон.
- Добавьте в представление блок с условием, который будет отображаться только в случае, если переменная, переданная из контроллера, равна определенному значению.
- Добавьте в представление цикл, который будет выводить список элементов, переданных из контроллера.
- Создайте новый шаблон, который будет использоваться для отображения ошибок.
- Добавьте в контроллер действие, которое будет генерировать исключение, и проверьте, что при генерации исключения будет отображаться созданный вами шаблон ошибок.
Результаты работы:
- Новый проект 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 по шаблонам: https://symfony.com/doc/current/templates.html
- Документация Symfony по представлениям: https://symfony.com/doc/current/controller.html#rendering-templates
- Документация Twig: https://twig.symfony.com/doc/2.x/
- Документация Symfony по обработке ошибок: https://symfony.com/doc/current/controller/error_pages.html