
Symfony 5.2 e PHP 8: Alcune interessanti novità
Session Profiling
Symfony Profiler è un utilissimo strumento per debuggare correttamente le pagine web; ci permette di visualizzare informazioni come il numero di query al database, i tempi di risposta e ora (finalmente) anche le informazioni di sessione. Per informazioni: Articolo e Pull Request.
PHP 8 attributes
Ho parlato di alcune delle novità di PHP 8 in questo articolo sul nostro blog ma ho volutamente tralasciato una novità che si sposa benissimo con Symfony: gli attributi.
Solitamente infatti le informazioni quali le Route o le istruzioni su come costruire le tabelle per Doctrine vengono scritte nelle cosiddette annotation:
// BEFORE: annotations defined with Doctrine Annotations library
use Symfony\Component\Routing\Annotation\Route;
class SomeController
{
/**
* @Route("/path", name="action")
*/
public function someAction()
{
// ...
}
}
In questo esempio, il controller “SomeController” risponderà con la action “someAction” quando l’utente richiama la url “/path”; questa potrebbe essere una pagina web o una API.
In PHP8, con le nuove annotation, possiamo sostituire la Route, che diventerà così:
// AFTER: annotations defined with PHP 8 attributes
use Symfony\Component\Routing\Annotation\Route;
class SomeController
{
#[Route('/path', name: 'action')]
public function someAction()
{
// ...
}
}
La cosa più interessante è che, nelle prossime settimane, verrà aggiunto il supporto a tante altre annotation, tra cui la validazione. Per informazioni: Articolo e Pull Request 1 e 2.
Doctrine types for UUID and ULID
Una cosa che usiamo moltissimo sono gli UUID: queste sono stringhe alfanumeriche casuali (o pseudocasuali) che identificano in modo univoco un elemento; la cosa più interessante è la portabilità del dato da un sistema all’altro. Non si tratta infatti di valori AutoIncrementcome i classici ID di ogni Database.
Solitamente per generare questi UUID possiamo utilizzare due sistemi: usare i Polyfill o dei pacchetti come ramsey/uuid
In Symfony 5.2 avremo il supporto nativo e potremo quindi scrivere Entity in questo modo:
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Column(type="uuid")
*/
private $someProperty;
/**
* @ORM\Column(type="ulid")
*/
private $anotherProperty;
// ...
}
Questo ci eviterà l’aggiunta di una nuova dipendenza al progetto e soprattutto renderà il tutto molto più leggibile. Per informazioni: Articolo e Pull Request
True colors in the console
Per concludere, una funzionalità prettamente “stilistica”, utile soprattutto quando si utilizza Symfony per creare comandi da utilizzare nella console: arriva il supporto ai colori 24-bit
// using a predefined style
$output->writeln('<info>... contents ...</>');
// custom style using basic colors
$output->writeln('<fg=green;bg=blue>... contents ...</>');
// custom style using true colors
$output->writeln('<fg=#00ff00;bg=#00f>... contents ...</>');
Per maggiori informazioni: Articolo e Pull Request.
Nelle prossime settimane sono certo che usciranno altre interessanti notizie! Restate sintonizzati.





