Лаб. работа “Шаблоны и представления в Symfony”
Разработка web-приложений с использованием программных платформ
Практика
Лабораторная работа будет посвящена изучению основных принципов работы с шаблонами и представлениями в фреймворке Symfony.
Цель работы:
- Изучить основные принципы работы с шаблонами и представлениями в Symfony
- Научиться создавать и использовать шаблоны в Symfony
- Научиться создавать и использовать представления в Symfony
- Научиться использовать встроенные хелперы в шаблонах и представлениях
Задания:
- Создайте новый проект Symfony с помощью композера.
- Создайте новый контроллер и действие в нем, которое будет возвращать простую строку.
- Создайте новый шаблон для этого действия и выведите в нем переменную, переданную из контроллера.
- Используя встроенные хелперы, добавьте в шаблон ссылку на другое действие контроллера.
- Создайте новое представление, которое будет использовать созданный ранее шаблон.
- Добавьте в представление блок с условием, который будет отображаться только в случае, если переменная, переданная из контроллера, равна определенному значению.
- Добавьте в представление цикл, который будет выводить список элементов, переданных из контроллера.
- Создайте новый шаблон, который будет использоваться для отображения ошибок.
- Добавьте в контроллер действие, которое будет генерировать исключение, и проверьте, что при генерации исключения будет отображаться созданный вами шаблон ошибок.
Результаты работы:
- Новый проект Symfony
- Новый контроллер и действие
- Новый шаблон
- Новое представление
- Использование встроенных хелперов в шаблонах и представлениях
- Блок с условием в представлении
- Цикл в представлении
- Шаблон ошибок
- Действие, генерирующее исключение
Основные команды:
- Создание нового проекта Symfony:
- Создание нового контроллера:
// src/Controller/MyController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MyController extends AbstractController
{
/**
* @Route("/my", name="my")
*/
public function index()
{
return $this->render('my/index.html.twig', [
'controller_name' => 'MyController',
]);
}
}
- Создание нового шаблона:
- Использование встроенных хелперов:
{# templates/my/index.html.twig #}
<h1>My page</h1>
<p>{{ controller_name }}</p>
<a href="{{ path('my_other') }}">Go to other page</a>
- Создание нового представления:
// src/Controller/MyController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MyController extends AbstractController
{
/**
* @Route("/my", name="my")
*/
public function index()
{
$var = 'value';
return $this->render('my/index.html.twig', [
'controller_name' => 'MyController',
'var' => $var,
]);
}
/**
* @Route("/my/other", name="my_other")
*/
public function other()
{
return $this->render('my/other.html.twig');
}
}
- Блок с условием в представлении:
{# templates/my/index.html.twig #}
<h1>My page</h1>
<p>{{ controller_name }}</p>
{% if var == 'value' %}
<p>Variable is equal to "value"</p>
{% endif %}
<a href="{{ path('my_other') }}">Go to other page</a>
- Цикл в представлении:
{# templates/my/index.html.twig #}
<h1>My page</h1>
<p>{{ controller_name }}</p>
{% for item in items %}
<p>{{ item }}</p>
{% endfor %}
<a href="{{ path('my_other') }}">Go to other page</a>
- Шаблон ошибок:
{# templates/bundles/TwigBundle/Exception/error.html.twig #}
<h1>Error {{ status_code }} - {{ status_text }}</h1>
<p>{{ message }}</p>
- Действие, генерирующее исключение:
// src/Controller/MyController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class MyController extends AbstractController
{
// ...
/**
* @Route("/my/error", name="my_error")
*/
public function error()
{
throw new \Exception('Error!');
}
}
Дополнительные материалы:
- Документация 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