Symfony Serializer — преобразование массива в объект — стратегия именования для каждого поляPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Symfony Serializer — преобразование массива в объект — стратегия именования для каждого поля

Сообщение Anonymous »

Я получаю такой массив из конечной точки внешнего API, например Person API, но имена ключей массива написаны на другом языке и с подчеркиванием — по моим стандартам кода использование этих имен недопустимо. Проект работает на Symfony 4.x и PHP 7.1

Код: Выделить всё

[
'first_name_in_other_language' => 'value',
'last_name_in_other_language' => 'value',
...more fields
]
но я хочу преобразовать его в запись класса с допустимыми именами полей, например (примечание: Person не является объектом доктрины — это простой объект для хранения данных)

Код: Выделить всё

class Person {private $firstName; private $lastName; ...more fields}
Проблема: я думаю, мне следует создать какой-нибудь массив/объект сопоставления, например

Код: Выделить всё

['first_name_in_other_language' => 'firstName']
но я не могу найти примеров такого подхода, связанного с Symfony
Может быть, это потому, что эта проблема больше связана с гидратором, чем с сериализатором?

Я нашел там этот кусок кода из zend гидратора, и похоже, что он поддерживает функцию, которая мне нужна (

Код: Выделить всё

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

Код: Выделить всё

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);
Вопрос: можно ли заархивировать его с помощью сериализатора Symfony или других компонентов Symfony?

Подробнее здесь: https://stackoverflow.com/questions/536 ... each-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»