Aprende a registrar una extensión Twig manualmente en un proyecto de Symfony 4 sin la función de autowire.

Si la función de autowire de su proyecto Symfony 4 está habilitada, las extensiones twig se registran automáticamente en su aplicación si la extensión extiende la AbstractExtensionclase y se almacenan en el formato app/src/Twig directory. Sin embargo, en algunos proyectos esta función puede deshabilitarse por motivos que no son de nuestro interés. Si ese es tu caso, es posible que debas saber cómo registrar dicha extensión en Symfony 4.

En este tutorial, le explicaremos cómo registrar una extensión Twig en su proyecto fácilmente sin la función de autowire.

1. Crear extensión

Como primer paso, necesitará tener una extensión Twig creada, puede usar su propia extensión o usar una extensión de ejemplo. En este caso, en nuestra extensión de ejemplo agregaremos un filtro y una función a nuestro proyecto (simplemente elimínelos de la clase si está usando el siguiente ejemplo). La clase usará el espacio de nombres App\Twig y extenderá AbstractExtension:

<?php

// app/src/Twig/AppExtension.php
namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class AppExtension extends AbstractExtension
{
    public function getFilters()
    {
        return [
            new TwigFilter('minifyVal', [$this, 'minifyVal']),
        ];
    }
    
    public function getFunctions()
    {
        return [
            new TwigFunction('is_mobile', [$this, 'is_mobile']),
        ];
    }
    
    /**
     * Verificar si el dispositivo es un mobil desde php
     * @return boolean
     */
    public function is_mobile(){
        $useragent = $_SERVER['HTTP_USER_AGENT'];
        if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))){
            return true;
        }
        
        return false;
    }

    /**
     * Le permite determinar el formato más legible de una cantidad de bytes.
     * 
     * @param type $n
     * @param type $precision
     * @return type
     */
    public function minifyVal($n, $precision = 1 ){
	if ($n < 900) {
            $n_format = number_format($n, $precision);
            $suffix = '';
	} else if ($n < 900000) {
            $n_format = number_format($n / 1000, $precision);
            $suffix = 'K';
	} else if ($n < 900000000) {
            $n_format = number_format($n / 1000000, $precision);
            $suffix = 'M';
	} else if ($n < 900000000000) {
            $n_format = number_format($n / 1000000000, $precision);
            $suffix = 'B';
	} else {
            $n_format = number_format($n / 1000000000000, $precision);
            $suffix = 'T';
	}
        
	if ( $precision > 0 ) {
            $dotzero = '.' . str_repeat( '0', $precision );
            $n_format = str_replace( $dotzero, '', $n_format );
	}
        
	return $n_format . $suffix;
    }
}

2. Registrar extensión

Una vez que el archivo de extensión esté en el directorio mencionado, proceda a registrarlo en el archivo services.yaml de su proyecto así (debajo del bloque services):

# app/config/services.yaml
services:
    app.twig_extension:
        class: App\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension } 

Si está en el entorno de desarrollo, una vez que vuelva a cargar su aplicación, la extensión se cargará y estará disponible de inmediato (el minifiVal filtro y la is_mobilefunción).

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores