October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk3 min

ObjectMapper in Symfony 8: trasformare DTO senza boilerplate

ObjectMapper riduce le assegnazioni manuali tra DTO e oggetti Symfony, ma nomi diversi, valori null e collezioni richiedono regole esplicite. Ecco il mapping di base e le novità di Symfony 8.1.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Symfony ObjectMapper riduce le assegnazioni manuali quando converti un DTO in un’entità o in un altro oggetto: installi symfony/object-mapper, inietti ObjectMapperInterface e chiami map(). Le proprietà con nomi corrispondenti possono essere copiate automaticamente; per rinominare, filtrare o trasformare valori e per convertire collezioni servono regole esplicite. Alcune comodità descritte qui, tra cui IsNotNull, richiedono Symfony 8.1.

Che cos’è ObjectMapper e quando usarlo

ObjectMapper trasforma un oggetto sorgente in un oggetto destinazione, per esempio un DTO in un’entità o viceversa. Symfony descrive il componente come un modo per semplificare queste conversioni e separare i modelli usati da API e applicazioni interne (documentazione Symfony Object Mapper).

As an Amazon Associate I earn from qualifying purchases.

È utile quando vuoi evitare di copiare a mano una serie di proprietà corrispondenti. Non sostituisce però ogni decisione di mapping: nomi diversi, conversioni di tipo, condizioni e contenuti di collezioni possono richiedere configurazione. Il mapping automatico non equivale a una conversione universale di qualunque oggetto.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Installare e usare il mapping di base

  1. Installa il componente: dalla directory del progetto esegui composer require symfony/object-mapper.
  2. Dichiara la destinazione: usa l’attributo #[Map(target: Product::class)] sulla classe DTO, come nello schema seguente.
  3. Inietta il mapper: in un’app Symfony, ObjectMapperInterface è autowired.
  4. Avvia la conversione: passa il DTO a map(). Se la destinazione è una classe configurata, il mapper crea l’oggetto; puoi anche passare un oggetto già esistente per aggiornarlo.
<?php

use AppEntityProduct;
use SymfonyComponentObjectMapperAttributeMap;
use SymfonyComponentObjectMapperObjectMapperInterface;

#[Map(target: Product::class)]
class ProductInput
{
    public string $name = '';
    public string $sku = '';
}

final class ProductService
{
    public function __construct(private ObjectMapperInterface $mapper)
    {
    }

    public function fromInput(ProductInput $input): Product
    {
        return $this->mapper->map($input);
    }
}

È uno schema didattico: il codice concreto deve rispettare le proprietà e i costruttori effettivi delle classi del progetto. Nel mapping diretto, le proprietà con nomi corrispondenti vengono copiate; quelle senza una proprietà corrispondente nella destinazione sono ignorate (documentazione Symfony Object Mapper).

Personalizzare nomi, condizioni e trasformazioni con #[Map]

Quando una proprietà sorgente e una destinazione non hanno lo stesso nome, #[Map] può indicare la proprietà da usare. Per esempio, #[Map(target: 'email')] su una proprietà sorgente la indirizza alla proprietà email della destinazione. Se le regole sono dichiarate sul target, source indica invece da quale proprietà leggere.

L’attributo supporta anche condizioni con if e trasformazioni con transform. La condizione permette di saltare o subordinare la copia; la trasformazione può usare una callable o un servizio transformer. Nella versione documentata per Symfony 8.1, una callable non risolvibile genera NoSuchCallableException: non trattarla come una proprietà semplicemente ignorata. Per le capacità di base si veda anche la documentazione Object Mapper di Symfony 7.3; le modifiche 8.1 sono descritte nel post ufficiale Symfony 8.1.

Gestire gli aggiornamenti parziali e i valori null

Se mappi un DTO su un oggetto già esistente, un valore null può sovrascrivere quello già presente, a meno che il mapping non preveda di saltarlo. Symfony 8.1 introduce IsNotNull, una condizione applicabile alle proprietà nullable per lasciare invariato il target quando il valore ricevuto è null.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

null e “campo assente” non sono necessariamente la stessa cosa nel contratto di una API. IsNotNull tratta il valore null; la semantica di un campo omesso va definita dal contratto e dal modo in cui il DTO viene popolato.

Rank #3
Sale
The Definitive Guide to symfony
  • Used Book in Good Condition

Convertire collezioni esplicitamente

ObjectMapper non converte automaticamente gli elementi di una collezione. Se una proprietà contiene un array di oggetti, configura MapCollection per trasformarli; senza questa regola la collezione resta invariata. Da Symfony 8.1, MapCollection(targetClass: ...) permette di specificare la classe di destinazione degli elementi. La documentazione corrente illustra il mapping delle collezioni e il blog Symfony dettaglia l’aggiunta di targetClass in 8.1 (documentazione; novità di Symfony 8.1).

Quali funzionalità dipendono da Symfony 8.1

“Symfony 8” comprende minor version differenti: non attribuire le novità 8.1 a ogni installazione della serie. La documentazione corrente e il post ufficiale indicano come introdotte in 8.1 diverse capacità utili:

  • Class map automatico nell’integrazione Symfony.
  • Regole dichiarate sulla classe destinazione con #[Map(source: ...)].
  • La condizione IsNotNull per saltare i valori null.
  • MapCollection(targetClass: ...) per specificare la classe degli elementi convertiti.
  • Condizioni basate su più classi e merge di oggetti annidati che mappano sulla stessa destinazione.
  • Un’eccezione dedicata, NoSuchCallableException, quando una callable configurata non è risolvibile.

Dichiarare le regole sul target può mantenere il modello di dominio libero dai metadati di mapping: l’oggetto di destinazione non deve necessariamente conoscere i DTO da cui può essere popolato.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

ObjectMapper non è il binding della richiesta HTTP

Per deserializzare direttamente il payload HTTP in un DTO del controller, Symfony documenta MapRequestPayload, che consente anche di configurare contesto e resolver. È un passaggio distinto dalla conversione successiva da DTO a entità: il primo porta la richiesta nel DTO, ObjectMapper può poi trasformare un oggetto in un altro (documentazione Symfony Controller).

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.