Você está na página 1de 12

21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

[Symfony 4] — Utilizando
Templates
Nando Kstro Net Follow
Dec 6, 2017 · 3 min read

Fala galera tudo bem? Voltamos com mais um post sobre Symfony 4, desta
vez vamos integrar o sistema de templates em nossa aplicação Symfony.
Aqui mostrarei a utilização do template engine Twig, caso não tenha
familiaridade com ele você pode acompanhar algumas aulas que fiz sobre o
mesmo abaixo:

Curso Conhecendo o Twig - Hello World!

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 1/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Playlist com aulas básicas sobre o template engine Twig

Se você caiu de paraquedas direto nesse post, saiba que já preparamos


alguns materiais sobre o Symfony 4, veja abaixo:

Symfony 4 — Iniciando a jornada;

Symfony 4 — Maker Bundle;

Symfony 4 — Symfony Flex;

Transmissão do Meetup da CEL sobre Symfony 4;

Symfony 4 — Trabalhando com Banco de Dados.

Adicionando o Template Pack

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 2/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Sem mais delongas, vamos adicionar o template pack em nossa aplicação.


Com essa instalação teremos a possibilidade de utilização dos templates
twig em nossa app. Como já conhecemos, basta executarmos um composer
require chamando o alias para o template pack (Twig Bundle), que nesse
caso é somente template! Veja abaixo:

composer req template

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 3/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Instalando o Twig Bundle no Symfony 4

Acima temos a instalação do Twig Bundle, que entre suas dependências


traz o twig e twig-bridge. Na versão 4 houve uma mudança bem drástica no
diretório de views, que agora encontra-se na raiz do nosso projeto, sendo
agora a pasta templates.

A pasta templates é criada automaticamente pelo symfony/flex no


momento da instalação dos pacotes acima relatados. E já traz o template
base: base.html.twig, veja seu conteúdo abaixo:

1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>{% block title %}Welcome!{% endblock %}</title>
6 {% block stylesheets %}{% endblock %}
7 </head>
8 <body>
9 {% block body %}{% endblock %}
https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 4/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts
{ y }{ }
10 {% block javascripts %}{% endblock %}
11 </body>
12 </html>

base.html.twig
hosted with ❤ by GitHub view raw

Chamando o template em nosso projeto


Utilizarei aqui o mesmo projeto do post sobre banco de dados no sf4, se
você leu o mesmo percebeu que terminamos nossa postagem com um
var_dump em cima dos dados vindos do banco.

Basicamente ficamos no código abaixo:

1 <?php
2
3 namespace App\Controller;
4
5 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
7 use Symfony\Component\HttpFoundation\Response;
8 use App\Entity\Product;
9
10 class ProductController extends AbstractController
11 {
12 /**
13 * @Route("/", name="product_home")
14 */
15 public function index()
https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 5/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts
15 public function index()
16 {
17 $products = $this->getDoctrine()
18 ->getRepository(Product::class)
19 ->findAll();
20
21 var_dump($products);
22 return new Response('Welcome to your new controller!');
23 }
24 }

ProductController.php
hosted with ❤ by GitHub view raw

Precisamos realizar pequenas mudanças nesse código, primeiramente


removeremos esse var_dump daí! Ao invés de retornarmos o \Response,
vamos retornar o render do nosso template (ao fim farei um pequeno
comentário sobre esse retorno, retorno das actions), veja como ficou nosso
código abaixo:

1 <?php
2
3 namespace App\Controller;
4
5 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
7 use Symfony\Component\HttpFoundation\Response;
8 use App\Entity\Product;
9
10 class ProductController extends AbstractController

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 6/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

11 {
12 /**
13 * @Route("/", name="product_home")
14 */
15 public function index()
16 {
17 $products = $this->getDoctrine()
18 ->getRepository(Product::class)
19 ->findAll();
20
21
22 return $this->render('products/index.html.twig',[
23 'products' => $products
24 ]);
25 }
26 }

ProductController.php
hosted with ❤ by GitHub view raw

Agora temos como retorno da nossa action o método render, onde


passamos o caminho até nossa view, neste caso na pasta
templates/products a view index.html.twig. Como segundo do
parâmetro do método render você pode enviar parâmetros para sua view,
passando um array associativo, onde a key será o nome referenciado no
template.

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 7/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Em nossa view fizemos um html bem simples, onde iteramos sobre os


produtos retornados. Veja:

1 {% extends 'base.html.twig' %}
2
3 {% block body %}
4 <h1> Produtos </h1>
5 <hr>
6 <ul>
7 {% for p in products %}
8 <li>
9 Nome: {{p.name}}
10 - Preço: R$ {{p.price|number_format(2, ',', '.')}}
11 </li>
12 {% endfor %}
13 </ul>
14 {% endblock %}

index.html.twig
hosted with ❤ by GitHub view raw

Testando em nosso browser, utilizando o built-in server do PHP chegamos


ao resultado mostrado abaixo:

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 8/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Aplicação com Symfony 4

Conclusões
Um ponto que queria comentar e que pode te ajudar em alguns momentos é
que os retornos das suas actions devem ser um objeto Response, do
Symfony\Component\HttpFoundation. Existem dois métodos 'render'
como helpers vindos do ControllerTrait que nosso AbstractController utiliza
e que nós extendemos. São eles:

render;

renderView.

Como comentei, o retorno das actions do seu controller devem ser um


objeto Response, caso você esteja retornando uma view em seu controller
você pode utilizar o método render, que já traz o retorno correto pra você
https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 9/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

com o html renderizado em um objeto Response. Caso você queira, nesse


caso, somente renderizar um html quem sabe pra um template de email,
você pode utilizar diretamente o renderView.

Imagino que essa parte de templates seja bem tranquila, o que pode te
travar, caso você desconheça ainda, é a utilização do Twig. O Symfony
suporta templates php puros também, caso você não se sinta a vontade com
o Twig.

Sempre que possível dê uma olhadinha na documentação em symfony.com.

Espero que esse post possa te ajudar de alguma forma, desejo sucesso e paz!

Abs!

Conheça nosso curso Symfony 4 Na Prática, você pode saber mais info
clicando aqui.

Veja algumas aulas de introdução abaixo:

[Symfony 4 Na Prática] - Introdução

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 10/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

Symfony Symfony4 Twig PHP

Learn more. Make Medium yours. Share your thinking.


Medium is an open platform where 170 million Follow the writers, publications, and topics that If you have a story to tell, knowledge to share, or
readers come to find insightful and dynamic matter to you, and you’ll see them on your a perspective to offer — welcome home. It’s
thinking. Here, expert and undiscovered voices homepage and in your inbox. Explore easy and free to post your thinking on any topic.
alike dive into the heart of any topic and bring Write on Medium
new ideas to the surface. Learn more

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 11/12
21/06/2021 [Symfony 4] — Utilizando Templates | by Nando Kstro Net | Code Experts

About Help Legal

https://blog.codeexpertslearning.com.br/symfony-4-utilizando-templates-1b800a882c5d 12/12

Você também pode gostar