Plantillas con twig

Symfony usa como plantillas la librería externa twig.

Dispone de una serie de elementos que nos permiten hacer algo de programación pero toda orientada al diseño. Así, tenemos bucles o estructuras de control, filtros que podemos aplicar a las variables, pero no disponemos de las funciones de php.

Para imprimir una variable usamos {{ … }}

Para una etiqueta de programación usamos {% … %}

Para un comentario usamos {# … #}

Algunos ejemplos:

{% if users %}
    <ul>
        {% for user in users %}
            <li>{{ user.username|e }}</li>
        {% endfor %}
    </ul>
{% endif %}
{% if temperature > 18 and temperature < 27 %}
    <p>It's a nice day for a walk in the park.</p>
{% endif %}
{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

Rutas en symfony

Hay muchas maneras de indicar las rutas en symfony, pero la más cómoda es usar annotations como hemos hecho en el ejemplo anterior:


 /**
* @Route("/hola/saludo")
*/

También podemos recuperar parámetros:


class HolaController
{
/**
* @Route("/hola/saludo/{nombre}")
*/
public function saludo($nombre)
{
$texto="Hola $nombre que tal";

return new Response(
'&lt;html&gt;&lt;body&gt;&lt;h1&gt; '.$texto.'&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;'
);
}
}

En nombre podemos usar un valor por defecto:

<strong>public function saludo($nombre='')[/php</strong>]

Y podemos usar expresiones regulares para indicar que queremos un tipo concreto de parámetro:

[php]</pre>
class HolaController
{
/**
* @Route("/hola/saludo/{numero<\d+>}")
*/
public function saludos($numero=1)
{
$texto="<h1>Hola que tal</h1>";
$res="";
for($i=0;$i<$numero;$i++){
$res.=$texto;
}
return new Response(
'<html><body>'.$res.'</body></html>'
);
}
/**
* @Route("/hola/saludo/{nombre}")
*/
public function saludo($nombre='')
{
$texto="Hola $nombre que tal";

return new Response(
'<html><body><h1> '.$texto.'</h1></body></html>'
);
}

}
<pre>

Primera página en symfony

Como vimos en el ejemplo de MVC desde cero, necesitamos una ruta y un controlador. Lo haremos todo junto.

Dentro de src\controller creamos una página llamada HolaController:


<?php
// src/Controller/HolaController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HolaController
{
/**
* @Route("/hola/saludo")
*/
public function saludo()
{
$texto="Hola que tal";

return new Response(
'<html><body><h1> '.$texto.'</h1></body></html>'
);
}
}

 

Si ahora vamos a la siguiente dirección, deberíamos ver el saludo:

http://localhost:8000/hola/saludo

Otra manera de crear un controlador es desde la consola:

 php bin/console make:controller adios

Esto nos crea lo siguiente:


<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class AdiosController extends AbstractController
{
/**
* @Route("/adios", name="adios")
*/
public function index()
{
return $this->render('adios/index.html.twig', [
'controller_name' => 'AdiosController',
]);
}
}

Instalar Symfony

Primero, instalar composer:

https://getcomposer.org/download/

Comprobar que tenemos php 7.1 o superior. Si no es así, debemos instalarla. La podemos instalar en otra carpeta.

Nos colocamos en htdocs, abrimos la consola y escribimos lo siguiente:

composer create-project symfony/website-skeleton mi_symfony

Para ejecutar nuestro symfony debemos hacer lo siguiente:

 cd mi_symfony
 php bin/console server:run

Y lo podremos ver en localhost:8000

Instalar moodle

Descargarlo de la web (moodle.org) y descomprimirlo en htdocs

Cambiar la siguiente línea en config.php:

$CFG->dbtype = ‘mariadb’;

Entrar en workbench y aplicar los siguientes cambios en la base de datos moodle:

SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_large_prefix=ON;

Cruzar los dedos y rezar a Santa Tecla 🙂

Si queremos verlo en acción podemos entrar en la zona demo:

https://moodle.org/demo/