Symfony - Ver motor
Una capa de vista es la capa de presentación de la aplicación MVC. Separa la lógica de la aplicación de la lógica de presentación.
Cuando un controlador necesita generar HTML, CSS o cualquier otro contenido, reenvía la tarea al motor de plantillas.
Plantillas
Las plantillas son básicamente archivos de texto que se utilizan para generar documentos basados en texto, como HTML, XML, etc. Se utilizan para ahorrar tiempo y reducir errores.
De forma predeterminada, las plantillas pueden residir en dos ubicaciones diferentes:
app/Resources/views/- El directorio de vistas de la aplicación puede contener los diseños y las plantillas de su aplicación del paquete de aplicaciones. También anula las plantillas de paquetes de terceros.
vendor/path/to/Bundle/Resources/views/ - Cada paquete de terceros contiene sus plantillas en su directorio "Resources / views /".
Motor de ramita
Symfony utiliza un poderoso lenguaje de plantillas llamado Twig. Twig te permite escribir plantillas concisas y legibles de una manera muy fácil. Las plantillas de Twig son simples y no procesan etiquetas PHP. Twig realiza control de espacios en blanco, sandboxing y escape HTML automático.
Sintaxis
Twig contiene tres tipos de sintaxis especial:
{{ ... }} - Imprime una variable o el resultado de una expresión en la plantilla.
{% ... %} - Una etiqueta que controla la lógica de la plantilla. Se utiliza principalmente para ejecutar una función.
{# ... #}- Sintaxis de comentario. Se utiliza para agregar comentarios de una o varias líneas.
La plantilla de la base de la ramita se encuentra en “app/Resources/views/base.html.twig”.
Ejemplo
Veamos un ejemplo simple usando el motor twig.
StudentController.php
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class StudentController extends Controller {
/**
* @Route("/student/home")
*/
public function homeAction() {
return $this->render('student/home.html.twig');
}
}
Aquí el render() El método renderiza una plantilla y coloca ese contenido en un objeto Response.
Ahora vaya al directorio "vistas" y cree una carpeta "estudiante" y dentro de esa carpeta cree un archivo "home.html.twig". Agregue los siguientes cambios en el archivo.
home.html.twig
//app/Resources/views/student/home.html.twig
<h3>Student application!</h3>
Puede obtener el resultado solicitando la url “http: // localhost: 8000 / student / home”.
De forma predeterminada, Twig viene con una larga lista de etiquetas, filtros y funciones. Repasemos uno por uno en detalle.
Etiquetas
Twig admite las siguientes etiquetas importantes:
Hacer
los doLa etiqueta realiza funciones similares a las de una expresión regular con la excepción de que no imprime nada. Su sintaxis es la siguiente:
{% do 5 + 6 %}
Incluir
La declaración de inclusión incluye una plantilla y devuelve el contenido renderizado de ese archivo en el espacio de nombres actual. Su sintaxis es la siguiente:
{% include 'template.html' %}
Se extiende
La etiqueta de extensión se puede utilizar para extender una plantilla de otra. Su sintaxis es la siguiente:
{% extends "template.html" %}
Bloquear
Block actúa como marcador de posición y reemplaza el contenido. Los nombres de bloque constan de caracteres alfanuméricos y guiones bajos. Por ejemplo,
<title>{% block title %}{% endblock %}</title>
Empotrar
los embedLa etiqueta realiza una combinación de incluir y extender. Te permite incluir el contenido de otra plantilla. También le permite anular cualquier bloque definido dentro de la plantilla incluida, como cuando se extiende una plantilla. Su sintaxis es la siguiente:
{% embed “new_template.twig” %}
{# These blocks are defined in “new_template.twig" #}
{% block center %}
Block content
{% endblock %}
{% endembed %}
Filtrar
Las secciones de filtro le permiten aplicar filtros Twig regulares en un bloque de datos de plantilla. Por ejemplo,
{% filter upper %}
symfony framework
{% endfilter %}
Aquí, el texto se cambiará a mayúsculas.
por
Forbucle recupera cada elemento en una secuencia. Por ejemplo,
{% for x in 0..10 %}
{{ x }}
{% endfor %}
Si
los ifLa declaración en Twig es similar a PHP. La expresión se evalúa como verdadera o falsa. Por ejemplo,
{% if value == true %}
<p>Simple If statement</p>
{% endif %}
Filtros
Twig contiene filtros. Se utiliza para modificar el contenido antes de ser renderizado. A continuación se muestran algunos de los filtros notables.
Longitud
El filtro de longitud devuelve la longitud de una cadena. Su sintaxis es la siguiente:
{% if name|length > 5 %}
...
{% endif %}
Inferior
El filtro inferior convierte un valor a minúsculas. Por ejemplo,
{{ 'SYMFONY'|lower }}
Produciría el siguiente resultado:
symfony
Del mismo modo, puede probar con mayúsculas.
Reemplazar
El filtro de reemplazo formatea una cadena determinada reemplazando los marcadores de posición. Por ejemplo,
{{ "tutorials point site %si% and %te%."|replace({'%si%': web, '%te%': "site"}) }}
Producirá el siguiente resultado:
tutorials point website
Título
El filtro de título devuelve una versión en mayúscula del valor. Por ejemplo,
{{ 'symfony framework '|title }}
Producirá el siguiente resultado:
Symfony Framework
Ordenar
El filtro de clasificación ordena una matriz. Su sintaxis es la siguiente:
{% for user in names|sort %}
...
{% endfor %}
Podar
El filtro de recorte recorta los espacios en blanco (u otros caracteres) desde el principio y el final de una cadena. Por ejemplo,
{{ ' Symfony! '|trim }}
Producirá el siguiente resultado:
Symfony!
Funciones
Twig admite funciones. Se utiliza para obtener un resultado particular. A continuación se muestran algunas de las funciones importantes de Twig.
Atributo
los attributeLa función se puede utilizar para acceder a un atributo "dinámico" de una variable. Su sintaxis es la siguiente:
{{ attribute(object, method) }}
{{ attribute(object, method, arguments) }}
{{ attribute(array, item) }}
Por ejemplo,
{{ attribute(object, method) is defined ? 'Method exists' : 'Method does not exist' }}
Constante
La función constante devuelve el valor constante para una cadena especificada. Por ejemplo,
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
Ciclo
La función de ciclo recorre una matriz de valores. Por ejemplo,
{% set months = [‘Jan’, ‘Feb’, ‘Mar’] %}
{% for x in 0..12 %}
{ cycle(months, x) }}
{% endfor %}
Fecha
Convierte un argumento en una fecha para permitir la comparación de fechas. Por ejemplo,
<p>Choose your location before {{ 'next Monday'|date('M j, Y') }}</p>
Producirá el siguiente resultado:
Choose your location before May 15, 2017
El argumento debe estar en uno de los formatos de fecha y hora admitidos por PHP.
Puede pasar una zona horaria como segundo argumento.
Tugurio
La función de volcado vuelca información sobre una variable de plantilla. Por ejemplo,
{{ dump(user) }}
Max
La función max devuelve el valor más grande de una secuencia. Por ejemplo,
{{ max(1, 5, 9, 11, 15) }}
Min
La función min devuelve el valor más pequeño de una secuencia. Por ejemplo,
{{ min(1, 3, 2) }}
Incluir
La función de inclusión devuelve el contenido renderizado de una plantilla. Por ejemplo,
{{ include('template.html') }}
Aleatorio
La función aleatoria genera un valor aleatorio. Por ejemplo,
{{ random([‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’]) }}
{# example output: Jan #}
Rango
La función de rango devuelve una lista que contiene una progresión aritmética de números enteros. Por ejemplo,
{% for x in range(1, 5) %}
{{ x }},
{% endfor %}
Producirá el siguiente resultado:
1,2,3,4,5
Diseños
Un diseño representa las partes comunes de varias vistas, es decir, por ejemplo, encabezado y pie de página.
Herencia de plantilla
Una plantilla puede ser utilizada por otra. Podemos lograr esto usando el concepto de herencia de plantilla. La herencia de plantillas le permite crear una plantilla de "diseño" base que contiene todos los elementos comunes del sitio web definidos como bloques.
Tomemos un ejemplo simple para comprender más sobre la herencia de plantillas.
Ejemplo
Considere la plantilla base ubicada en "app / Resources / views / base.html.twig". Agregue los siguientes cambios en el archivo.
base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>{% block title %}Parent template Layout{% endblock %}</title>
</head>
</html>
Ahora vaya al archivo de plantilla de índice ubicado en "app / Resources / views / default / index.html.twig" . Agregue los siguientes cambios en él.
index.html.twig
{% extends 'base.html.twig' %}
{% block title %}Child template Layout{% endblock %}
Aquí el {% extends %}La etiqueta informa al motor de plantillas que primero evalúe la plantilla base, que configura el diseño y define el bloque. A continuación, se procesa la plantilla secundaria. Una plantilla secundaria puede ampliar el diseño base y anular el bloque de título. Ahora, solicite la url “http: // localhost: 8000” y podrá obtener su resultado.
Bienes
El activo gestiona la generación de URL y el control de versiones de activos web, como hojas de estilo CSS, archivos JavaScript y archivos de imagen.
JavaScript
Para incluir archivos JavaScript, utilice el javascripts etiqueta en cualquier plantilla.
{# Include javascript #}
{% block javascripts %}
{% javascripts '@AppBundle/Resources/public/js/*' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
Hojas de estilo
Para incluir archivos de hoja de estilo, use el stylesheets etiqueta en cualquier plantilla
{# include style sheet #}
{% block stylesheets %}
{% stylesheets 'bundles/app/css/*' filter = 'cssrewrite' %}
<link rel = "stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
{% endblock %}
Imagenes
Para incluir una imagen, puede utilizar la etiqueta de imagen. Se define como sigue.
{% image '@AppBundle/Resources/public/images/example.jpg' %}
<img src = "{{ asset_url }}" alt = "Example" />
{% endimage %}
Activos compuestos
Puede combinar muchos archivos en uno. Esto ayuda a reducir la cantidad de solicitudes HTTP y produce un mayor rendimiento de front-end.
{% javascripts
'@AppBundle/Resources/public/js/*'
'@AcmeBarBundle/Resources/public/js/form.js'
'@AcmeBarBundle/Resources/public/js/calendar.js' %}
<script src = "{{ asset_url }}"></script>
{% endjavascripts %}