Symfony - Componentes

Como se discutió anteriormente, los componentes de Symfony son una biblioteca PHP independiente que proporciona una característica específica, que puede usarse en cualquier aplicación PHP. Se están introduciendo nuevos componentes útiles en todas y cada una de las versiones de Symfony. Actualmente, hay más de 30 componentes de alta calidad en el marco de Symfony. Aprendamos sobre el uso de los componentes de Symfony en este capítulo.

Instalación de un componente Symfony

Los componentes de Symfony se pueden instalar fácilmente usando el comando composer. El siguiente comando genérico se puede utilizar para instalar cualquier componente de Symfony.

cd /path/to/project/dir 
composer require symfony/<component_name>

Creemos una aplicación php simple e intentemos instalar Filesystem componente.

Step 1 - Crea una carpeta para la aplicación, filesystem-example

cd /path/to/dev/folder 
mdkir filesystem-example 
cd filesystem-example

Step 2 - Instale el componente del sistema de archivos usando el siguiente comando.

composer require symfony/filesystem

Step 3 - Crea un archivo main.php e ingrese el siguiente código.

<?php 
   require_once __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Filesystem\Filesystem; 
   use Symfony\Component\Filesystem\Exception\IOExceptionInterface; 
   
   $fs = new Filesystem(); 
   try { 
      $fs->mkdir('./sample-dir'); 
      $fs->touch('./sample-dir/text.txt'); 
   } catch (IOExceptionInterface $e) { 
      echo $e; 
   } 
?>

La primera línea es muy importante, que carga todas las clases necesarias de todos los componentes instalados usando el comando Composer. Las siguientes líneas usan la clase Filesystem.

Step 4 - Ejecute la aplicación usando el siguiente comando y creará una nueva carpeta sample-dir y un archivo test.txt bajo ello.

php main.php

Detalles de los componentes de Symfony

Symfony proporciona componentes que van desde funciones simples, por ejemplo, sistema de archivos hasta funciones avanzadas, por ejemplo, eventos, tecnología de contenedores e inyección de dependencia. Háganos saber acerca de todos los componentes uno por uno en las siguientes secciones.

Sistema de archivos

El componente del sistema de archivos proporciona un comando básico del sistema relacionado con archivos y directorios, como la creación de archivos, la creación de carpetas, la existencia de archivos, etc. El componente del sistema de archivos se puede instalar usando el siguiente comando.

composer require symfony/filesystem

Descubridor

El componente Finder proporciona clases fluidas para buscar archivos y directorios en una ruta específica. Proporciona una forma sencilla de iterar sobre los archivos en una ruta. El componente Finder se puede instalar usando el siguiente comando.

composer require symfony/finder

Consola

El componente de consola proporciona varias opciones para crear comandos fácilmente, que se pueden ejecutar en una terminal. Symfony usa elCommand componente ampliamente para proporcionar varias funcionalidades, como la creación de una nueva aplicación, la creación de un paquete, etc. Incluso la compilación de PHP en el servidor web se puede invocar utilizando el comando Symfony, php bin/console server:runcomo se ve en la sección de instalación. losConsole El componente se puede instalar usando el siguiente comando.

composer require symfony/console

Creemos una aplicación simple y creemos un comando, HelloCommand utilizando el Console componente e invocarlo.

Step 1 - Crea un proyecto usando el siguiente comando.

cd /path/to/project 
composer require symfony/console

Step 2 - Crea un archivo main.php e incluir el siguiente código.

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Console\Application; 
   
   $app = new Application(); 
   $app->run(); 
?>

Application class configura la funcionalidad necesaria de una aplicación de consola básica.

Step 3 - Ejecuta la aplicación, php main.php, que producirá el siguiente resultado.

Console Tool  
Usage: 
   command [options] [arguments]  
Options: 
   -h, --help            Display this help message 
   -q, --quiet           Do not output any message 
   -V, --version         Display this application version 
         --ansi            Force ANSI output 
         --no-ansi         Disable ANSI output 
   -n, --no-interaction  Do not ask any interactive question 
   -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 
      2 for more verbose output and 3 for debug  
Available commands: 
   help  Displays help for a command 
   list  Lists commands

Step 4 - Crea una clase llamada HelloCommand extensión Command clase en el main.php sí mismo.

use Symfony\Component\Console\Command\Command; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 
use Symfony\Component\Console\Input\InputArgument;

class HelloCommand extends Command { 
}

La aplicación utiliza las siguientes cuatro clases disponibles en Command componente.

  • Command - Se usa para crear un nuevo comando.

  • InputInterface - Se utiliza para configurar las entradas del usuario

  • InputArgument - Se usa para obtener entradas del usuario

  • OutputInterface - Se utiliza para imprimir la salida a la consola.

step 5 - Crea una función configure() y configure el nombre, la descripción y el texto de ayuda.

protected function configure() { 
   $this 
      ->setName('app:hello') 
      ->setDescription('Sample command, hello') 
      ->setHelp('This command is a sample command') 
}

step 6 - Crea un argumento de entrada, user para el comando y establecerlo como obligatorio.

protected function configure() { 
   $this 
      ->setName('app:hello') 
      ->setDescription('Sample command, hello') 
      ->setHelp('This command is a sample command') 
      ->addArgument('name', InputArgument::REQUIRED, 'name of the user'); 
}

step 7 - Crea una función execute() con dos argumentos InputArgument y OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
}

step 8 - utilizar InputArgument para obtener los detalles del usuario ingresados ​​por el usuario e imprimirlos en la consola usando OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
   $name = $input->getArgument('name'); 
   $output->writeln('Hello, ' . $name); 
}

step 9 - Registrar el HelloCommand en la aplicación usando el add método de Application clase.

$app->add(new HelloCommand());

La aplicación completa es la siguiente.

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Console\Application; 
   use Symfony\Component\Console\Command\Command; 
   use Symfony\Component\Console\Input\InputInterface; 
   use Symfony\Component\Console\Output\OutputInterface; 
   use Symfony\Component\Console\Input\InputArgument;  
   
   class HelloCommand extends Command { 
      protected function configure() { 
         $this 
            ->setName('app:hello') 
            ->setDescription('Sample command, hello') 
            ->setHelp('This command is a sample command') 
            ->addArgument('name', InputArgument::REQUIRED, 'name of the user'); 
      }  
      protected function execute(InputInterface $input, OutputInterface $output) { 
         $name = $input->getArgument('name'); 
         $output->writeln('Hello, ' . $name);
      }  
      $app = new Application(); 
      $app->add(new HelloCommand()); 
      $app->run(); 
   }         
?>

Step 10 - Ahora, ejecute la aplicación usando el siguiente comando y el resultado será Hola, Jon como se esperaba.

php main.php app:hello Jon

Symfony viene con un binario prediseñado llamado console en el directorio bin de cualquier aplicación web de Symfony, que se puede utilizar para invocar los comandos en una aplicación.

Proceso

El componente de proceso proporciona opciones para ejecutar cualquier comando del sistema en un subproceso, de manera segura y eficiente. El componente de proceso se puede instalar usando el siguiente comando.

composer require symfony/process

ClassLoader

El componente ClassLoader proporciona implementación para ambos PSR-0 y PSR-4cargador de clase estándar. Se puede utilizar para cargar automáticamente las clases. Se depreciará en un futuro próximo. Se prefiere el cargador de clases basado en Composer sobre este componente. El componente ClassLoader se puede instalar usando el siguiente comando.

composer require symfony/class-loader

PropertyAccess

El componente PropertyAccess proporciona varias opciones para leer y escribir un objeto y los detalles de la matriz utilizando la notación de cadena. Por ejemplo, una matrizProduct con llave price se puede acceder dinámicamente usando [price] cuerda.

$product = array( 
   'name' => 'Cake' 
   'price' => 10 
);  
var priceObj = $propertyAccesserObj->getValue($product, '[price]');

El componente PropertyAccess se puede instalar usando el siguiente comando.

composer require symfony/property-access

PropertyInfo

El componente PropertyInfo es similar al componente PropertyAccess, sin embargo, solo funciona con objetos PHP y proporciona mucha más funcionalidad.

class Product { 
   private $name = 'Cake'; 
   private $price = 10;  
   
   public function getName() { 
      return $this->name; 
   }  
   public function getPrice() { 
      return $this->price; 
   } 
}  
$class = Product::class; 
$properties = $propertyInfoObj->getProperties($class);  
/* 
   Example Result 
   -------------- 
   array(2) { 
      [0] => string(4) "name" 
      [1] => string(5) "price" 
   } 
*/

El componente PropertyInfo se puede instalar usando el siguiente comando.

composer require symfony/property-info

EventDispatcher

El componente EventDispatcher proporciona una programación basada en eventos en PHP. Permite que los objetos se comuniquen entre sí enviando eventos y escuchándolos. Aprenderemos cómo crear eventos y escucharlos en el capítulo Eventos y escucha de eventos.

El componente EventDispatcher se puede instalar usando el siguiente comando.

composer require symfony/event-dispatcher

Inyección de dependencia

El componente DependencyInjection proporciona un mecanismo sencillo y eficaz para crear un objeto con su dependencia. Cuando un proyecto crece, presenta muchas clases con una dependencia profunda, que debe manejarse correctamente. De lo contrario, el proyecto fracasa. DependencyInjection proporciona un contenedor simple y robusto para manejar la dependencia. Aprenderemos sobre los contenedores y el concepto de inyección de dependencia en el capítulo Contenedor de servicios.

El componente DependencyInjection se puede instalar usando el siguiente comando.

composer require symfony/dependency-injection

Serializador

El componente serializador proporciona una opción para convertir un objeto PHP en un formato específico como XML, JSON, binario, etc., y luego le permite convertirlo nuevamente en un objeto original sin pérdida de datos.

El componente serializador se puede instalar usando el siguiente comando.

composer require symfony/serializer

Config

El componente de configuración proporciona opciones para cargar, analizar, leer y validar configuraciones de tipo XML, YAML, PHP e ini. También proporciona varias opciones para cargar detalles de configuración desde la base de datos. Este es uno de los componentes importantes útiles para configurar la aplicación web de una manera clara y concisa. El componente de configuración se puede instalar usando el siguiente comando.

composer require symfony/config

ExpressionLanguage

El componente ExpessionLanguage proporciona un motor de expresión completo. Las expresiones son de una sola línea y están destinadas a devolver un valor. El motor de expresiones permite compilar, analizar y obtener fácilmente el valor de una expresión. Permite que una o más expresiones sean utilizadas en un entorno de configuración (archivo) por un programador que no es PHP, digamos un administrador del sistema. El componente ExpressionLanguage se puede instalar usando el siguiente comando.

composer require symfony/expression-language

OpcionesResolver

El componente OptionsResolver proporciona una forma de validar el sistema de opciones utilizado en nuestro sistema. Por ejemplo, la configuración de la base de datos se coloca en una matriz, dboption con host, nombre de usuario, contraseña, etc., como claves. Debe validar las entradas antes de usarlo para conectarse a una base de datos. OptionsResolver simplifica esta tarea al proporcionar una clase simple OptionsResolver y un solucionador de métodos, que resuelve la configuración de la base de datos y si hay algún problema de validación, lo informará.

$options = array( 
   'host'     => '<db_host>', 
   'username' => '<db_user>', 
   'password' => '<db_password>', 
);  
$resolver = new OptionsResolver(); 
$resolver->setDefaults(array( 
   'host'     => '<default_db_host>', 
   'username' => '<default_db_user>', 
   'password' => '<default_db_password>', 
)); 
$resolved_options = $resolver->resolve($options);

El componente OptionsResolver se puede instalar usando el siguiente comando.

composer require symfony/options-resolver

Dotenv

El componente Dotenv proporciona varias opciones para analizar archivos .env y la variable definida en ellos para que sea accesible a través de getenv(), $_ENVo $_SERVER. El componente Dotenv se puede instalar usando el siguiente comando.

composer require symfony/dotenv

Cache

El componente de caché proporciona un PSR-6implementación. Puede usarse para agregar funcionalidad de caché a nuestra aplicación web. Ya que siguePSR-6, es fácil comenzar y se puede usar fácilmente en lugar de otro componente de caché basado en PSR-6. El componente de caché se puede instalar usando el siguiente comando.

composer require symfony/cache

Intl

El componente Intl es la biblioteca de reemplazo para la extensión C Intl. El componente Intl se puede instalar usando el siguiente comando.

composer require symfony/intl

Traducción

El componente de traducción ofrece varias opciones para internacionalizar nuestra aplicación. Normalmente, los detalles de traducción de diferentes idiomas se almacenarán en un archivo, un archivo por idioma, y ​​se cargarán dinámicamente durante el tiempo de ejecución de la aplicación. Existen diferentes formatos para escribir un archivo de traducción. El componente de traducción proporciona varias opciones para cargar cualquier tipo de formato, como archivo PHP simple, CSV, ini, Json, Yaml, archivo de recursos ICU, etc. El componente de traducción se puede instalar usando el siguiente comando.

composer require symfony/translation

Flujo de trabajo

El componente de flujo de trabajo proporciona herramientas avanzadas para procesar una máquina de estados finitos. Al proporcionar esta funcionalidad de una manera simple y orientada a objetos, el componente Workflow permite la programación avanzada en PHP con relativa facilidad. Lo aprenderemos en detalle en el capítulo Concepto avanzado.

El componente de flujo de trabajo se puede instalar usando el siguiente comando.

composer require symfony/workflow

Yaml

El componente Yaml proporciona una opción que analiza el formato de archivo YAML y lo convierte en matrices PHP. También puede escribir archivos YAML desde una matriz php simple. El componente Yaml se puede instalar usando el siguiente comando.

composer require symfony/yaml

LDAP

El componente Ldap proporciona clases de PHP para conectarse a un servidor LDAP o Active Directory y autenticar al usuario contra él. Proporciona una opción para conectarse a un controlador de dominio de Windows. El componente LDAP se puede instalar usando el siguiente comando.

composer require symfony/ldap

Depurar

El componente de depuración proporciona varias opciones para habilitar la depuración en el entorno PHP. Normalmente, depurar el código PHP es difícil, pero el componente de depuración proporciona clases simples para facilitar el proceso de depuración y hacerlo limpio y estructurado. El componente de depuración se puede instalar usando el siguiente comando.

composer require symfony/debug

Cronógrafo

El componente Stopwatch proporciona la clase Stopwatch para perfilar nuestro código PHP. Un uso simple es el siguiente.

use Symfony\Component\Stopwatch\Stopwatch; 
$stopwatch = new Stopwatch(); 
$stopwatch->start('somename');  

// our code to profile 
$profiled_data = $stopwatch->stop('somename');  
echo $profiled_data->getPeriods()

El componente de cronómetro se puede instalar usando el siguiente comando.

composer require symfony/stopwatch

VarDumper

El componente VarDumper proporciona una mejor dump()función. Simplemente incluya el componente VarDumper y use la función de volcado para obtener la funcionalidad mejorada. El componente VarDumper se puede instalar usando el siguiente comando.

composer require symfony/var-dumper

BrowserKit

El componente BrowserKit proporciona una interfaz de cliente de navegador abstracta. Se puede utilizar para probar aplicaciones web mediante programación. Por ejemplo, puede solicitar un formulario, ingresar los datos de muestra y enviarlos para encontrar cualquier problema en el formulario mediante programación. El componente BrowserKit se puede instalar usando el siguiente comando.

composer require symfony/browser-kit

Puente PHPUnit

El componente PHPUnit Bridge ofrece muchas opciones para mejorar el entorno de prueba PHPUnit. El componente PHPUnit Bridge se puede instalar usando el siguiente comando.

composer require symfony/phpunit-bridge

Activo

El componente de activos proporciona un manejo de activos genérico en una aplicación web. Genera URL para los activos como CSS, HTML, JavaScript y también realiza el mantenimiento de la versión. Verificaremos el componente de activos en detalle en el capítulo Ver motor. El componente de activo se puede instalar usando el siguiente comando.

composer require symfony/asset

CssSelector

El componente CssSelector proporciona una opción para convertir los selectores basados ​​en CSS en una expresión XPath. Un desarrollador web conoce la expresión de Selectores basados ​​en CSS más que la expresión XPath, pero la expresión más eficiente para encontrar un elemento en un documento HTML y XML esXPath Expression.

CssSelector permite al desarrollador escribir la expresión en selectores CSS , sin embargo, el componente la convierte en expresión XPath antes de ejecutarla. Por lo tanto, el desarrollador tiene la ventaja de la simplicidad de los selectores CSS y la eficiencia de la expresión XPath.

El componente CssSelector se puede instalar usando el siguiente comando.

composer require symfony/css-selector

DomCrawler

El componente DomCrawler proporciona varias opciones para encontrar el elemento en documentos HTML y XML utilizando el concepto DOM. También ofrece la opción de utilizar la expresión XPath para encontrar un elemento. El componente DomCrawler se puede utilizar junto con el componente CssSelector para utilizar selectores CSS en lugar de la expresión XPath. El componente DomCrawler se puede instalar usando el siguiente comando.

composer require symfony/dom-crawler

Formar

El componente de formulario permite la creación sencilla de formularios en una aplicación web. Aprenderemos la programación de formularios en detalle en el capítulo de formularios. El componente de formulario se puede instalar usando el siguiente comando.

composer require symfony/form

HttpFoundation

El componente HttpFoundation proporciona una capa orientada a objetos para la especificación HTTP. De forma predeterminada, PHP proporciona detalles de respuesta y solicitud HTTP como un objeto basado en matriz, como$_GET, $_POST, $_FILES, $_SESSION, etc. La funcionalidad basada en HTTP, como la configuración de una cookie, se puede realizar utilizando una función antigua simple setCookie(). HttpFoundation proporciona toda la funcionalidad relacionada con HTTP en un pequeño conjunto de clases como Request, Response, RedirectResponse, etc. Aprenderemos sobre estas clases en los capítulos posteriores.

El componente HttpFoundation se puede instalar usando el siguiente comando.

composer require symfony/http-foundation

HttpKernel

El componente HttpKernel es el componente principal de la configuración web de Symfony. Proporciona todas las funcionalidades necesarias para una aplicación web, desde la recepción delRequest objetar a devolver el Responseobjeto. La arquitectura completa de la aplicación web Symfony es proporcionada por HttpKernel como se explica en la arquitectura de un marco web Symfony.

El componente HttpKernel se puede instalar usando el siguiente comando.

composer require symfony/http-kernel

Enrutamiento

El componente de enrutamiento asigna la solicitud HTTP a un conjunto predefinido de variables de configuración. El enrutamiento decide qué parte de nuestra aplicación debe manejar una solicitud. Aprenderemos más sobre el enrutamiento en el capítulo Enrutamiento.

El componente de enrutamiento se puede instalar usando el siguiente comando.

composer require symfony/filesystem

Plantillas

El componente de plantillas proporciona la infraestructura necesaria para construir un sistema de plantillas eficiente. Symfony utiliza el componente de plantillas para la implementación de su motor de visualización. Aprenderemos más sobre el componente de plantillas en el capítulo Ver motor.

El componente de plantilla se puede instalar usando el siguiente comando.

composer require symfony/templating

Validador

El componente Validator proporciona una implementación de JSR-303 Bean Validation Specification. Se puede utilizar para validar un formulario en un entorno web. Aprenderemos más sobre Validator en el capítulo de Validación.

El componente Validator se puede instalar usando el siguiente comando.

composer require symfony/validator

Seguridad

El componente de seguridad proporciona un sistema de seguridad completo para nuestra aplicación web, ya sea autenticación básica HTTP, autenticación HTTP digest, autenticación basada en formularios interactivos, inicio de sesión de certificación X.509, etc. También proporciona un mecanismo de autorización basado en el rol del usuario a través del sistema ACL incorporado . Aprenderemos más en detalle en el capítulo Concepto avanzado.

El componente de seguridad se puede instalar usando el siguiente comando.

composer require symfony/security