{"id":3755,"date":"2024-01-22T10:55:31","date_gmt":"2024-01-22T09:55:31","guid":{"rendered":"https:\/\/www.dotenv.it\/non-categorizzato\/symfony-5-2-e-php-8-alcune-interessanti-novita"},"modified":"2025-02-27T09:44:19","modified_gmt":"2025-02-27T08:44:19","slug":"symfony-5-2-e-php-8-alcune-interessanti-novita","status":"publish","type":"post","link":"https:\/\/www.dotenv.it\/en\/blog\/symfony-5-2-e-php-8-alcune-interessanti-novita","title":{"rendered":"Symfony 5.2 e PHP 8: alcune interessanti novit\u00e0"},"content":{"rendered":"<p>Stanno uscendo, proprio in questi giorni, sul\u00a0blog di <b>Symfony<\/b>\u00a0interessanti articoli sulle<b> nuove funzionalit\u00e0 della versione 5.2<\/b>; in DotEnv siamo molto attenti a queste notizie in quanto utilizzatori abituali delle ultime versioni dei software.<\/p>\n<p>Nel caso di Symfony solitamente si rilasciano sempre versioni fino alla .4 (quindi, in questo caso, la 5.4) che diventer\u00e0 la LTS (Long Term Support) per poi passare alla versione 6; fino alla 5.4 \u00e8 quindi lecito aspettarsi nuove funzionalit\u00e0 oltre alla consueta sistemazione di bug. Maggiori informazioni sul ciclo di rilascio di Symfony, le trovi di seguito.<\/p>\n<h2>Session Profiling<\/h2>\n<p>Symfony Profiler \u00e8 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:<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-5-2-session-profiling\" target=\"_blank\" rel=\"noopener\"><b>Articolo<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>e<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/symfony\/symfony\/pull\/36364\" target=\"_blank\" rel=\"noopener\"><b>Pull Request.<\/b><\/a><\/p>\n<h2>PHP 8 attributes<\/h2>\n<p>Abbiamo parlato di alcune delle novit\u00e0 di PHP 8 in<span class=\"ProseMirror__styled\">\u00a0<\/span><b>ques<\/b><b>t<\/b><b>o articolo<\/b><span class=\"ProseMirror__styled\">\u00a0<\/span>sul nostro blog ma abbiamo volutamente tralasciato una novit\u00e0 che si sposa benissimo con Symfony: gli attributi.<br \/>\nSolitamente infatti le informazioni quali le\u00a0<i>Route<\/i><span class=\"ProseMirror__styled\">\u00a0<\/span>o le istruzioni su come costruire le tabelle per\u00a0<i>Doctrine<\/i><span class=\"ProseMirror__styled\">\u00a0<\/span>vengono scritte nelle cosiddette annotation:<\/p>\n<p><code>\/\/ BEFORE: annotations defined with Doctrine Annotations library<\/code><\/p>\n<p><code>use SymfonyComponentRoutingAnnotationRoute;<\/code><\/p>\n<p><code>class SomeController<\/code><\/p>\n<p><code>{<\/code><\/p>\n<p><code>\/**<\/code><\/p>\n<p><code> * @Route(\"\/path\", name=\"action\")<\/code><\/p>\n<p><code> *\/<\/code><\/p>\n<p><code>public function someAction()<\/code><\/p>\n<p><code>{<\/code><\/p>\n<p><code>\/\/ ...<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p>In questo esempio, il controller \u201cSomeController\u201d risponder\u00e0 con la action \u201csomeAction\u201d quando l\u2019utente richiama la url \u201c\/path\u201d; questa potrebbe essere una pagina web o una API.<br \/>\nIn PHP8, con le nuove annotation, possiamo sostituire la Route, che diventer\u00e0 cos\u00ec:<\/p>\n<p><span class=\"ProseMirror__styled\">\/<\/span><code>\/ AFTER: annotations defined with PHP 8 attributes<\/code><\/p>\n<p><code>use SymfonyComponentRoutingAnnotationRoute;<\/code><\/p>\n<p><code>class SomeController<\/code><\/p>\n<p><code>{<\/code><\/p>\n<p><code>#[Route('\/path', name: 'action')]<\/code><\/p>\n<p><code>public function someAction()<\/code><\/p>\n<p><code>{<\/code><\/p>\n<p><code>\/\/ ...<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p>La cosa pi\u00f9 interessante \u00e8 che, nelle prossime settimane, verr\u00e0 aggiunto il supporto a tante altre annotation, tra cui la validazione. Per informazioni:<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-5-2-php-8-attributes\" target=\"_blank\" rel=\"noopener\"><b>Articolo<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>e Pull Request<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/symfony\/symfony\/pull\/37474\" target=\"_blank\" rel=\"noopener\"><b>1<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>e<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/symfony\/symfony\/pull\/37545\" target=\"_blank\" rel=\"noopener\"><b>2<\/b><\/a>.<\/p>\n<h2>Doctrine types for UUID and ULID<\/h2>\n<p>Una cosa che utilizziamo moltissimo sono gli UUID: queste sono stringhe alfanumeriche casuali (o pseudocasuali) che identificano in modo univoco un elemento; la cosa pi\u00f9 interessante \u00e8 la portabilit\u00e0 del dato da un sistema all\u2019altro. Non si tratta infatti di valori\u00a0<i>AutoIncrement<\/i>come i classici ID di ogni Database.<\/p>\n<p>Solitamente per generare questi UUID possiamo utilizzare due sistemi: usare i<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/symfony.com\/blog\/introducing-the-new-symfony-uuid-polyfill\" target=\"_blank\" rel=\"noopener\"><b>Polyfill<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>o dei pacchetti come<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/ramsey\/uuid\" target=\"_blank\" rel=\"noopener\"><b>ramsey\/uuid<\/b><\/a><\/p>\n<p>In Symfony 5.2 avremo il supporto nativo e potremo quindi scrivere\u00a0<i>Entity<\/i><span class=\"ProseMirror__styled\">\u00a0<\/span>in questo modo:<\/p>\n<p><code>\/\/ src\/Entity\/Product.php<\/code><\/p>\n<p><code>namespace AppEntity;<\/code><\/p>\n<p><code>use DoctrineORMMapping as ORM;<\/code><\/p>\n<p><code>\/**<\/code><\/p>\n<p><code> * @ORMEntity(repositoryClass=\"AppRepositoryProductRepository\")<\/code><\/p>\n<p><code> *\/<\/code><\/p>\n<p><code>class Product<\/code><\/p>\n<p><code>{<\/code><\/p>\n<p><code>\/**<\/code><\/p>\n<p><code> * @ORMColumn(type=\"uuid\")<\/code><\/p>\n<p><code> *\/<\/code><\/p>\n<p><code>private $someProperty;<\/code><\/p>\n<p><code>\/**<\/code><\/p>\n<p><code> * @ORMColumn(type=\"ulid\")<\/code><\/p>\n<p><code> *\/<\/code><\/p>\n<p><code>private $anotherProperty;<\/code><\/p>\n<p><code>\/\/ ...<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p>Questo ci eviter\u00e0 l\u2019aggiunta di una nuova dipendenza al progetto e soprattutto render\u00e0 il tutto molto pi\u00f9 leggibile. Per informazioni:<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-5-2-doctrine-types-for-uuid-and-ulid\" target=\"_blank\" rel=\"noopener\"><b>Articolo<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>e<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/symfony\/symfony\/pull\/37678\" target=\"_blank\" rel=\"noopener\"><b>Pull Request<\/b><\/a><\/p>\n<h2>True colors in the console<\/h2>\n<p>Per concludere, una funzionalit\u00e0 prettamente \u201cstilistica\u201d, utile soprattutto quando si utilizza Symfony per creare comandi da utilizzare nella<span class=\"ProseMirror__styled\">\u00a0<\/span><i>console<\/i>: arriva il supporto ai colori 24-bit<\/p>\n<p><code>\/\/ using a predefined style<\/code><\/p>\n<p><code>$output-&gt;writeln('&lt;info&gt;... contents ...&lt;\/&gt;');<\/code><\/p>\n<p><code>\/\/ custom style using basic colors<\/code><\/p>\n<p><code>$output-&gt;writeln('&lt;fg=green;bg=blue&gt;... contents ...&lt;\/&gt;');<\/code><\/p>\n<p><code>\/\/ custom style using true colors<\/code><\/p>\n<p><code>$output-&gt;writeln('&lt;fg=#00ff00;bg=#00f&gt;... contents ...&lt;\/&gt;');<\/code><\/p>\n<p>Per maggiori informazioni:<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-5-2-true-colors-in-the-console\" target=\"_blank\" rel=\"noopener\"><b>Articolo<\/b><\/a><span class=\"ProseMirror__styled\">\u00a0<\/span>e<span class=\"ProseMirror__styled\">\u00a0<\/span><a href=\"https:\/\/github.com\/symfony\/symfony\/pull\/36802\" target=\"_blank\" rel=\"noopener\"><b>Pull Request.<\/b><\/a><\/p>\n<p>Nelle prossime settimane siamo certi che usciranno altre interessanti notizie!<\/p>\n<p>Restate sintonizzati.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stanno uscendo, proprio in questi giorni, sul\u00a0blog di Symfony\u00a0interessanti articoli sulle nuove funzionalit\u00e0 della versione 5.2; in DotEnv siamo molto attenti a queste notizie in quanto utilizzatori abituali delle ultime versioni dei software.<br \/>\nNel caso di Symfony solitamente si rilasciano sempre versioni fino alla .4 (quindi, in questo caso, la 5.4) che diventer\u00e0 la LTS (Long Term Support) per poi passare alla versione 6; fino alla 5.4 \u00e8 quindi lecito aspettarsi nuove funzionalit\u00e0 oltre alla consueta sistemazione di bug. Maggiori informazioni sul ciclo di rilascio di Symfony le trovi di seguito.<\/p>\n","protected":false},"author":19,"featured_media":3543,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,22],"tags":[],"class_list":["post-3755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-soluzioni-software"],"_links":{"self":[{"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/posts\/3755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/comments?post=3755"}],"version-history":[{"count":4,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/posts\/3755\/revisions"}],"predecessor-version":[{"id":6054,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/posts\/3755\/revisions\/6054"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/media\/3543"}],"wp:attachment":[{"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/media?parent=3755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/categories?post=3755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dotenv.it\/en\/wp-json\/wp\/v2\/tags?post=3755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}