Symfony Serializer – Array-zu-Objekt-Konvertierung – Benennungsstrategie für jedes FeldPhp

PHP-Programmierer chatten hier
Anonymous
 Symfony Serializer – Array-zu-Objekt-Konvertierung – Benennungsstrategie für jedes Feld

Post by Anonymous »

Ich erhalte ein Array wie dieses von einem externen API-Endpunkt, z. B. Person API, aber die Namen der Array-Schlüssel sind in einer anderen Sprache und mit Unterstrichen versehen – die Verwendung dieser Namen ist nach meinen Codestandards nicht akzeptabel. Das Projekt läuft unter Symfony 4.x und PHP 7.1

Code: Select all

[
'first_name_in_other_language' => 'value',
'last_name_in_other_language' => 'value',
...more fields
]
Aber ich möchte es in einen Klasseneintrag mit gültigen Feldnamen konvertieren, z. B. (Hinweis: Person ist keine Doktrinentität – es ist ein einfaches Objekt zum Speichern von Daten)

Code: Select all

class Person {private $firstName; private $lastName; ...more fields}
Problem: Ich denke, ich sollte eine Art Mapper-Array/Objekt wie

erstellen

Code: Select all

['first_name_in_other_language' => 'firstName']
aber ich kann keine Beispiele für diesen Ansatz im Zusammenhang mit Symfony finden
Vielleicht liegt es daran, dass dieses Problem eher mit Hydrator als mit Serializer zusammenhängt?

Ich finde dort diesen Codeabschnitt von Zend Hydrator und es sieht so aus, als würde er die Funktion unterstützen, die ich brauche (

Code: Select all

new MapNamingStrategy(['published' => 'isPublished'])
):

Code: Select all

use Acme\Transaction;
use Zend\Hydrator\NamingStrategy\CompositeNamingStrategy;
use Zend\Hydrator\NamingStrategy\MapNamingStrategy;
use Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
use Zend\Hydrator\ObjectProperty as ObjectPropertyHydrator;

$underscoreNamingStrategy = new UnderscoreNamingStrategy();
$namingStrategy = new CompositeNamingStrategy([
'isPublished' => new MapNamingStrategy(['published' => 'isPublished']),
'publishedOn' => $underscoreNamingStrategy,
'updatedOn'   => $underscoreNamingStrategy,
]);

$hydrator = new ObjectPropertyHydrator();
$hydrator->setNamingStrategy($namingStrategy);
$data = $hydrator->extract($transaction);
Frage: Ist es möglich, es mit dem Symfony-Serializer oder anderen Symfony-Komponenten zu archivieren?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post