Symfony - Componenti

Come discusso in precedenza, i componenti di Symfony sono librerie PHP autonome che forniscono una caratteristica specifica, che può essere utilizzata in qualsiasi applicazione PHP. Nuovi componenti utili vengono introdotti in ogni rilascio di Symfony. Attualmente, ci sono oltre 30 componenti di alta qualità nel framework Symfony. Impariamo a conoscere l'uso dei componenti di Symfony in questo capitolo.

Installazione di un componente Symfony

I componenti di Symfony possono essere installati facilmente usando il comando composer. Il seguente comando generico può essere utilizzato per installare qualsiasi componente di Symfony.

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

Creiamo una semplice applicazione php e proviamo ad installarla Filesystem componente.

Step 1 - Crea una cartella per l'applicazione, filesystem-example

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

Step 2 - Installa il componente Filesystem utilizzando il seguente comando.

composer require symfony/filesystem

Step 3 - Crea un file main.php e inserisci il codice seguente.

<?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 prima riga è molto importante, che carica tutte le classi necessarie da tutti i componenti installati utilizzando il comando Composer. Le righe successive usano la classe Filesystem.

Step 4 - Esegui l'applicazione utilizzando il seguente comando e creerà una nuova cartella sample-dir e un file test.txt sotto di essa.

php main.php

Dettagli sui componenti di Symfony

Symfony fornisce componenti che vanno da funzionalità semplici, ad esempio file system, a funzionalità avanzate, ad esempio eventi, tecnologia dei contenitori e iniezione di dipendenze. Fateci sapere di tutti i componenti uno per uno nelle sezioni seguenti.

Filesystem

Il componente del file system fornisce un comando di sistema di base relativo a file e directory come la creazione di file, la creazione di cartelle, l'esistenza di file, ecc. Il componente del file system può essere installato utilizzando il seguente comando.

composer require symfony/filesystem

Finder

Il componente Finder fornisce classi fluide per trovare file e directory in un percorso specificato. Fornisce un modo semplice per scorrere i file in un percorso. Il componente Finder può essere installato utilizzando il seguente comando.

composer require symfony/finder

Console

Il componente console fornisce varie opzioni per creare facilmente comandi, che possono essere eseguiti in un terminale. Symfony utilizza l'estensioneCommand ampiamente per fornire varie funzionalità come la creazione di una nuova applicazione, la creazione di un bundle, ecc. Anche la build PHP nel server web può essere invocata usando il comando Symfony, php bin/console server:runcome si vede nella sezione installazione. IlConsole componente può essere installato utilizzando il seguente comando.

composer require symfony/console

Creiamo una semplice applicazione e creiamo un comando, HelloCommand usando il Console componente e invocarlo.

Step 1 - Crea un progetto utilizzando il seguente comando.

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

Step 2 - Crea un file main.php e includere il codice seguente.

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

Application class imposta le funzionalità necessarie di un'applicazione console ridotta all'osso.

Step 3 - Esegui l'applicazione, php main.php, che produrrà il seguente risultato.

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 classe chiamata HelloCommand estendendosi Command classe in main.php si.

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 { 
}

L'applicazione utilizza le seguenti quattro classi disponibili in Command componente.

  • Command - Usato per creare un nuovo comando

  • InputInterface - Utilizzato per impostare gli input dell'utente

  • InputArgument - Utilizzato per ottenere gli input dell'utente

  • OutputInterface - Utilizzato per stampare l'output sulla console

step 5 - Crea una funzione configure() e impostare nome, descrizione e testo della guida.

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

step 6 - Crea un argomento di input, user per il comando e impostato come obbligatorio.

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 funzione execute() con due argomenti InputArgument e OutputArgument.

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

step 8 - Usa InputArgument per ottenere i dettagli dell'utente inseriti dall'utente e stamparli sulla console utilizzando OutputArgument.

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

step 9 - Registra il file HelloCommand nell'applicazione utilizzando il add metodo di Application classe.

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

L'applicazione completa è la seguente.

<?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 - Ora, esegui l'applicazione utilizzando il seguente comando e il risultato sarà Hello, Jon come previsto.

php main.php app:hello Jon

Symfony viene fornito con un binario precostruito chiamato console nella directory bin di qualsiasi applicazione web Symfony, che può essere usata per invocare i comandi in un'applicazione.

Processi

Il componente Processo fornisce opzioni per eseguire qualsiasi comando di sistema in un sottoprocesso, in modo sicuro ed efficiente. Il componente di processo può essere installato utilizzando il seguente comando.

composer require symfony/process

ClassLoader

Il componente ClassLoader fornisce l'implementazione per entrambi PSR-0 e PSR-4class loader standard. Può essere utilizzato per caricare automaticamente le classi. Sarà ammortizzato nel prossimo futuro. Il programma di caricamento classi basato su Composer è preferito a questo componente. Il componente ClassLoader può essere installato utilizzando il seguente comando.

composer require symfony/class-loader

PropertyAccess

Il componente PropertyAccess fornisce varie opzioni per leggere e scrivere un oggetto e i dettagli della matrice utilizzando la notazione di stringa. Ad esempio, un arrayProduct con chiave price è possibile accedervi dinamicamente utilizzando [price] corda.

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

Il componente PropertyAccess può essere installato utilizzando il seguente comando.

composer require symfony/property-access

PropertyInfo

Il componente PropertyInfo è simile al componente PropertyAccess, tuttavia funziona solo con oggetti PHP e fornisce molte più funzionalità.

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" 
   } 
*/

Il componente PropertyInfo può essere installato utilizzando il seguente comando.

composer require symfony/property-info

EventDispatcher

Il componente EventDispatcher fornisce una programmazione basata su eventi in PHP. Consente agli oggetti di comunicare tra loro inviando eventi e ascoltandoli. Impareremo come creare eventi e ascoltarli nel capitolo Eventi e Listener di eventi.

Il componente EventDispatcher può essere installato utilizzando il seguente comando.

composer require symfony/event-dispatcher

Iniezione di dipendenza

Il componente DependencyInjection fornisce un meccanismo semplice ed efficiente per creare un oggetto con la sua dipendenza. Quando un progetto cresce, presenta molte classi con una profonda dipendenza, che deve essere gestita correttamente. In caso contrario, il progetto fallisce. DependencyInjection fornisce un contenitore semplice e robusto per gestire la dipendenza. Impareremo a conoscere i contenitori e il concetto di inserimento delle dipendenze nel capitolo Contenitore di servizi.

Il componente DependencyInjection può essere installato utilizzando il seguente comando.

composer require symfony/dependency-injection

Serializzatore

Il componente Serializer fornisce un'opzione per convertire un oggetto PHP in un formato specifico come XML, JSON, Binary, ecc. E quindi gli consente di riconvertirlo in un oggetto originale senza alcuna perdita di dati.

Il componente Serializer può essere installato utilizzando il seguente comando.

composer require symfony/serializer

Config

Il componente Config fornisce opzioni per caricare, analizzare, leggere e convalidare configurazioni di tipo XML, YAML, PHP e ini. Fornisce anche varie opzioni per caricare i dettagli di configurazione dal database. Questo è uno dei componenti importanti utili per configurare l'applicazione web in modo chiaro e conciso. Il componente Config può essere installato utilizzando il seguente comando.

composer require symfony/config

ExpressionLanguage

Il componente ExpessionLanguage fornisce un motore di espressione completo. Le espressioni sono una riga destinata a restituire un valore. Il motore delle espressioni consente di compilare, analizzare e ottenere facilmente il valore da un'espressione. Consente a una o più espressioni da utilizzare in un ambiente di configurazione (file) da un programmatore non PHP, ad esempio un amministratore di sistema. Il componente ExpressionLanguage può essere installato utilizzando il seguente comando.

composer require symfony/expression-language

Opzioni Risolutore

Il componente OptionsResolver fornisce un modo per convalidare il sistema di opzioni utilizzato nel nostro sistema. Ad esempio, l'impostazione del database viene inserita in un array, dboption con host, nome utente, password, ecc. Come chiavi. È necessario convalidare le voci prima di utilizzarlo per connettersi a un database. OptionsResolver semplifica questa attività fornendo una semplice classe OptionsResolver e un resolver del metodo, che risolve l'impostazione del database e se c'è qualche problema di convalida, lo segnalerà.

$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);

Il componente OptionsResolver può essere installato utilizzando il seguente comando.

composer require symfony/options-resolver

Dotenv

Il componente Dotenv fornisce varie opzioni per analizzare i file .env e la variabile definita in essi per essere accessibile tramite getenv(), $_ENV, o $_SERVER. Il componente Dotenv può essere installato utilizzando il seguente comando.

composer require symfony/dotenv

Cache

Il componente Cache fornisce una estensione PSR-6implementazione. Può essere utilizzato per aggiungere funzionalità di cache alla nostra applicazione web. Dal momento che seguePSR-6, è facile iniziare e può essere facilmente utilizzato al posto di un altro componente cache basato sulla PSR-6. Il componente cache può essere installato utilizzando il seguente comando.

composer require symfony/cache

Intl

Il componente Intl è la libreria sostitutiva per l'estensione C Intl. Il componente Intl può essere installato utilizzando il seguente comando.

composer require symfony/intl

Traduzione

Il componente di traduzione offre varie opzioni per internazionalizzare la nostra applicazione. Normalmente, i dettagli di traduzione di diverse lingue verranno memorizzati in un file, un file per lingua, e verranno caricati dinamicamente durante il runtime dell'applicazione. Esistono diversi formati per scrivere un file di traduzione. Il componente di traduzione fornisce varie opzioni per caricare qualsiasi tipo di formato, come file PHP semplice, CSV, ini, Json, Yaml, file di risorse ICU, ecc. Il componente di traduzione può essere installato utilizzando il seguente comando.

composer require symfony/translation

Flusso di lavoro

Il componente del flusso di lavoro fornisce strumenti avanzati per elaborare una macchina a stati finiti. Fornendo questa funzionalità in modo semplice e orientato agli oggetti, il componente Workflow consente la programmazione avanzata in PHP con relativa facilità. Lo impareremo in dettaglio nel capitolo Advanced Concept.

Il componente del flusso di lavoro può essere installato utilizzando il seguente comando.

composer require symfony/workflow

Yaml

Il componente Yaml fornisce un'opzione che analizza il formato del file YAML e lo converte in array PHP. È anche in grado di scrivere file YAML da un semplice array php. Il componente Yaml può essere installato utilizzando il seguente comando.

composer require symfony/yaml

Ldap

Il componente LDAP fornisce classi PHP per connettersi a un server LDAP o Active Directory e autenticare l'utente su di esso. Fornisce un'opzione per connettersi a un controller di dominio Windows. Il componente LDAP può essere installato utilizzando il seguente comando.

composer require symfony/ldap

Debug

Il componente di debug fornisce varie opzioni per abilitare il debug nell'ambiente PHP. Normalmente, il debug del codice PHP è difficile ma il componente di debug fornisce classi semplici per facilitare il processo di debug e renderlo pulito e strutturato. Il componente di debug può essere installato utilizzando il seguente comando.

composer require symfony/debug

Cronometro

Il componente Stopwatch fornisce la classe Stopwatch per profilare il nostro codice PHP. Un semplice utilizzo è il seguente.

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

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

Il componente Stopwatch può essere installato utilizzando il seguente comando.

composer require symfony/stopwatch

VarDumper

Il componente VarDumper fornisce una migliore dump()funzione. Basta includere il componente VarDumper e utilizzare la funzione dump per ottenere la funzionalità migliorata. Il componente VarDumper può essere installato utilizzando il seguente comando.

composer require symfony/var-dumper

BrowserKit

Il componente BrowserKit fornisce un'interfaccia client browser astratta. Può essere utilizzato per testare l'applicazione Web a livello di codice. Ad esempio, può richiedere un modulo, immettere i dati di esempio e inviarlo per trovare qualsiasi problema nel modulo a livello di codice. Il componente BrowserKit può essere installato utilizzando il seguente comando.

composer require symfony/browser-kit

PHPUnit Bridge

Il componente PHPUnit Bridge fornisce molte opzioni per migliorare l'ambiente di test PHPUnit. Il componente PHPUnit Bridge può essere installato utilizzando il seguente comando.

composer require symfony/phpunit-bridge

Risorsa

Il componente asset fornisce una gestione degli asset generica in un'applicazione web. Genera URL per le risorse come CSS, HTML, JavaScript ed esegue anche la manutenzione della versione. Verificheremo il componente asset in dettaglio nel capitolo View Engine. Il componente asset può essere installato utilizzando il seguente comando.

composer require symfony/asset

CssSelector

Il componente CssSelector fornisce un'opzione per convertire i selettori basati su CSS in espressioni XPath. Uno sviluppatore web conosce l'espressione Selectors basata su CSS più dell'espressione XPath, ma l'espressione più efficiente per trovare un elemento nel documento HTML e XML èXPath Expression.

CssSelector consente allo sviluppatore di scrivere l'espressione nei selettori CSS , tuttavia, il componente la converte in espressione XPath prima di eseguirla. Pertanto, lo sviluppatore ha il vantaggio della semplicità dei selettori CSS e dell'efficienza dell'espressione XPath.

Il componente CssSelector può essere installato utilizzando il seguente comando.

composer require symfony/css-selector

DomCrawler

Il componente DomCrawler fornisce varie opzioni per trovare l'elemento nel documento HTML e XML utilizzando il concetto DOM. Fornisce inoltre l'opzione per utilizzare l'espressione XPath per trovare un elemento. Il componente DomCrawler può essere utilizzato insieme al componente CssSelector per utilizzare selettori CSS invece dell'espressione XPath. Il componente DomCrawler può essere installato utilizzando il seguente comando.

composer require symfony/dom-crawler

Modulo

Il componente Modulo consente una facile creazione del modulo in un'applicazione web. Impareremo in dettaglio la programmazione dei form nel capitolo Form. Il componente del modulo può essere installato utilizzando il seguente comando.

composer require symfony/form

HttpFoundation

Il componente HttpFoundation fornisce un livello orientato agli oggetti per la specifica HTTP. Per impostazione predefinita, PHP fornisce dettagli su richieste e risposte HTTP come oggetti basati su array come$_GET, $_POST, $_FILES, $_SESSION, ecc. Funzionalità basate su HTTP come l'impostazione di un cookie possono essere eseguite utilizzando una semplice funzione vecchia setCookie(). HttpFoundation fornisce tutte le funzionalità relative a HTTP in un piccolo insieme di classi come Request, Response, RedirectResponse, ecc., Impareremo a conoscere queste classi nei capitoli successivi.

Il componente HttpFoundation può essere installato utilizzando il seguente comando.

composer require symfony/http-foundation

HttpKernel

Il componente HttpKernel è il componente principale nella configurazione web di Symfony. Fornisce tutte le funzionalità richieste per un'applicazione web, dalla ricezione del fileRequest opporsi alla restituzione del file Responseoggetto. L'architettura completa dell'applicazione web Symfony è fornita da HttpKernel, come discusso nell'architettura di un framework web Symfony.

Il componente HttpKernel può essere installato utilizzando il seguente comando.

composer require symfony/http-kernel

Routing

Il componente di routing associa la richiesta HTTP a un set predefinito di variabili di configurazione. Il routing decide quale parte della nostra applicazione deve gestire una richiesta. Impareremo di più sul routing nel capitolo Routing.

Il componente di instradamento può essere installato utilizzando il seguente comando.

composer require symfony/filesystem

Modelli

Il componente di creazione dei modelli fornisce l'infrastruttura necessaria per creare un sistema di modelli efficiente. Symfony usa il componente Templating per la sua implementazione del motore di visualizzazione. Impareremo di più sul componente Templating nel capitolo Motore di visualizzazione.

Il componente di modellazione può essere installato utilizzando il seguente comando.

composer require symfony/templating

Validatore

Il componente Validator fornisce un'implementazione di JSR-303 Bean Validation Specification. Può essere utilizzato per convalidare un modulo in un ambiente web. Impareremo di più su Validator nel capitolo Validation.

Il componente Validator può essere installato utilizzando il seguente comando.

composer require symfony/validator

Sicurezza

Il componente di sicurezza fornisce un sistema di sicurezza completo per la nostra applicazione web, che si tratti di autenticazione di base HTTP, autenticazione digest HTTP, autenticazione basata su modulo interattivo, accesso con certificazione X.509, ecc. Fornisce anche un meccanismo di autorizzazione basato sul ruolo dell'utente attraverso il sistema ACL integrato . Impareremo più in dettaglio nel capitolo Advanced Concept.

Il componente di sicurezza può essere installato utilizzando il seguente comando.

composer require symfony/security