Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Con ObjectMapper puoi copiare proprietà compatibili da un DTO a un’entità senza scrivere un’assegnazione per ciascun campo. Installi symfony/object-mapper, inietti ObjectMapperInterface e chiami map(). Per nomi diversi, condizioni, trasformazioni e collezioni, però, servono regole esplicite. Inoltre, alcune funzioni descritte qui sono specifiche di Symfony 8.1.
Che cosa fa ObjectMapper
Symfony descrive ObjectMapper come un componente che trasforma un oggetto in un altro, ad esempio un DTO in un’entità o viceversa. È utile per separare i modelli usati dall’API da quelli interni all’applicazione e ridurre il codice ripetitivo di assegnazione. Non sostituisce ogni logica di conversione: il mapping automatico copre soprattutto le proprietà compatibili, mentre gli altri casi vanno dichiarati.
La documentazione corrente è disponibile nella guida ufficiale a Object Mapper. Per le funzionalità introdotte in Symfony 8.1, vedere anche l’annuncio New in Symfony 8.1: ObjectMapper Improvements.
Installazione e primo mapping
Installa il componente con Composer:
composer require symfony/object-mapper
Nell’integrazione Symfony, ObjectMapperInterface viene autowired. Puoi dichiarare la classe di destinazione sul DTO con #[Map(target: ...)] e poi chiamare map() senza passare un secondo argomento.
#1 Best Overall
<?php
use AppEntityProduct;
use SymfonyComponentObjectMapperAttributeMap;
#[Map(target: Product::class)]
class ProductInput
{
public string $name = '';
public string $sku = '';
}
final class ProductService
{
public function __construct(
private SymfonyComponentObjectMapperObjectMapperInterface $mapper,
) {
}
public function fromInput(ProductInput $input): Product
{
return $this->mapper->map($input);
}
}
L’esempio presuppone proprietà compatibili e un’entità istanziabile secondo la configurazione del progetto. Verifica quindi i costruttori, i tipi e le proprietà effettive: l’attributo indica la classe target, ma non elimina i requisiti del tuo modello.
Creare un oggetto o aggiornarne uno esistente
map() accetta una classe di destinazione, così da creare un oggetto nuovo, oppure un oggetto target già esistente da aggiornare. La seconda forma è utile quando vuoi applicare i dati di un DTO a un’entità caricata dal database.
$product = $this->mapper->map($input, $existingProduct);
Con nomi di proprietà corrispondenti, ObjectMapper esegue il mapping diretto; le proprietà sorgente prive di corrispondenza nella destinazione vengono ignorate. Per le capacità di base, la documentazione di Object Mapper per Symfony 7.3 offre un riferimento versionato.
Rinominare, condizionare e trasformare proprietà
Quando i nomi o i valori non coincidono, usa #[Map] per rendere la regola esplicita.
Rank #3
- Rinominare:
#[Map(target: 'email')]indica la proprietà di destinazione per un campo sorgente. L’opzionesourceè utile quando la regola è dichiarata sulla proprietà target. - Condizionare: l’opzione
ifconsente di copiare una proprietà solo quando la condizione è soddisfatta. - Trasformare: l’opzione
transformapplica una callable o un servizio transformer al valore.
In Symfony 8.1, una callable indicata in if o transform che non può essere risolta genera NoSuchCallableException. Un nome errato, quindi, non va trattato come se la proprietà fosse semplicemente ignorata.
Gestire null negli aggiornamenti parziali
In Symfony 8.1, la condizione IsNotNull permette di saltare il mapping quando la proprietà DTO vale null, lasciando invariato il valore già presente nel target. Applicala alle proprietà nullable per cui questo comportamento è voluto.
Rank #4
null e “campo assente” non sono necessariamente equivalenti: il significato dipende dal contratto dell’API e da come il DTO viene popolato. La regola tratta il valore null; non stabilisce da sola la semantica dei campi omessi in una richiesta PATCH.
Recommended Free Tools
Mappare collezioni di oggetti
ObjectMapper non converte automaticamente gli elementi di una collezione. Per trasformare una collezione di oggetti sorgente in una di oggetti destinazione, configura esplicitamente MapCollection. In Symfony 8.1, il parametro targetClass consente di specificare la classe degli elementi target. Senza questa trasformazione, la collezione resta invariata.
Best Value
Che cosa cambia in Symfony 8.1
Non tutte le funzionalità di ObjectMapper sono disponibili in ogni versione minor di Symfony 8. La documentazione corrente segnala come novità di Symfony 8.1, tra le altre, la class map automatica nell’integrazione Symfony, le regole dichiarate sulla classe destinazione con #[Map(source: ...)], IsNotNull, MapCollection(targetClass: ...), condizioni basate su più classi e il merge di oggetti annidati diretti alla stessa destinazione.
Dichiarare le regole sul DTO o view model può mantenere l’entità di dominio libera dai metadati di mapping. Prima di usare una funzione marcata come nuova in 8.1, controlla la minor version del progetto e la relativa documentazione ufficiale corrente.
ObjectMapper non è il binding della richiesta HTTP
Per convertire il payload HTTP in ingresso in un DTO del controller, Symfony mette a disposizione MapRequestPayload, che deserializza la richiesta e permette di configurare contesto e resolver. È un passaggio distinto dal successivo mapping DTO→entità: MapRequestPayload si occupa della richiesta verso il DTO, mentre ObjectMapper trasforma un oggetto sorgente in un oggetto destinazione. La guida Symfony per i controller e MapRequestPayload documenta il primo caso.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePer la sincronizzazione tra campi di un form e modello, Symfony dispone invece di un sistema distinto di data mapper per i form: è un altro problema rispetto alla conversione generale fra oggetti.
Quick Recap
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.

