Это потому, что вы забыли добавить $serializer = new Serializer([$normalizer])
бит.См. Рабочий пример ниже.
РЕАЛИЗАЦИЯ
use App\User;
use App\CustomAttributes;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
use Symfony\Component\Serializer\Serializer;
class SnakeCaseUtility
{
public function convert(): array
{
$classMetadataFactory = null;
$nameConverter = new CamelCaseToSnakeCaseNameConverter();
$normalizer = new PropertyNormalizer($classMetadataFactory, $nameConverter);
$serializer = new Serializer([$normalizer]);
$normalizedUser = $serializer->normalize($this->getUser(), 'json');
return $normalizedUser;
}
private function getUser(): User
{
$customAttributes = new CustomAttributes();
$customAttributes->someStuff = 'Some stuff';
$customAttributes->someStuffHere = 'Some stuff here';
$user = new User();
$user->userId = 123;
$user->userName = 'Hello World';
$user->email = 'hello@world.com';
$user->customAttributes = $customAttributes;
return $user;
}
}
ТЕСТ
use App\SnakeCaseUtility;
use PHPUnit\Framework\TestCase;
class SnakeCaseUtilityTest extends TestCase
{
public function testSnakeCase(): void
{
$expected = [
'email' => 'hello@world.com',
'user_id' => 123,
'user_name' => 'Hello World',
'custom_attributes' => [
'some_stuff' => 'Some stuff',
'some_stuff_here' => 'Some stuff here',
]
];
$this->assertSame($expected, (new SnakeCaseUtility())->convert());
}
}
РЕЗУЛЬТАТ
$ vendor/bin/phpunit --filter SnakeCaseUtilityTest tests/SnakeCaseUtilityTest.php
PHPUnit 7.5.1 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 83 ms, Memory: 4.00MB
OK (1 test, 1 assertion)