Symfony 5 DotEnv

Symfony 5.2 e PHP 8: Alcune interessanti novità

Stanno uscendo, proprio in questi giorni, sul blog di Symfony interessanti articoli sulle nuove funzionalità della versione 5.2; in DotEnv siamo molto attenti a queste notizie perché utilizziamo sempre le ultime versioni dei software.
Nel caso di Symfony solitamente si rilasciano sempre versioni fino alla .4 (quindi, in questo caso, la 5.4) che diventerà la LTS (Long Term Support) per poi passare alla versione 6; fino alla 5.4 è quindi lecito aspettarsi nuove funzionalità oltre alla consueta sistemazione di bug. Maggiori informazioni sul ciclo di rilascio di Symfony le trovate qui.

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 AutoIncrement come 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.

 

di Nicola Bettini, Senior Backend Developer di DotEnv