有人可以帮我弄这个吗?我正在尝试使用Symfony Serializer将对象序列化为json,它确实将对象转换为json,但它不会将对象数组从camelCase转换为snake_case。
我目前正在使用Symfony 3.3的默认Serializer
以下是我的代码。
framework:
serializer:
enabled: true
name_converter: 'serializer.name_converter.camel_case_to_snake_case'
services:
get_set_method_normalizer:
class:Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
public: true
tags: [serializer.normalizer]
Persons.php
class Person{
private $firstName;
private $lastName;
private $email;
//setters and getters
}
PersonController.php
class PersonController extends Controller {
/**
* @Route("api/person")
* @Method("POST")
*/
public function person(){
$person = new Person();
$person->setFirstName("test");
$person->setLastName("test");
$person->setEmail("[email protected]");
$person1 = new Person();
$person1->setFirstName("test 1");
$person1->setLastName("test 1");
$person1->setEmail("[email protected]");
$arr = array($person, $person1);
$serializer = $this->get("serializer");
return new Response($serializer->serialize($arr,"json"));
}
}
以下是当前输出。
[
{
"firstName":"test",
"lastName":"test"
"email":"[email protected]"
},
{
"firstName":"test 1",
"lastName":"test 1"
"email":"[email protected]"
}
]
预期产出将是:
[
{
"first_name":"test",
"last_name":"test",
"email":"[email protected]"
},
{
"first_name":"test 1",
"last_name":"test 1",
"email":"[email protected]"
}
]
尝试显式传递服务的参数:
get_set_method_normalizer:
class:Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
public: true
arguments: ['@serializer.mapping.class_metadata_factory', '@serializer.name_converter.camel_case_to_snake_case']
tags: [serializer.normalizer]
为camel_case_to_snake_case
添加别名更容易
services:
...
Symfony\Component\Serializer\NameConverter\NameConverterInterface: '@serializer.name_converter.camel_case_to_snake_case'
对于symfony 4,这对我有用:
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
public: true
arguments: ['@serializer.mapping.class_metadata_factory', '@serializer.name_converter.camel_case_to_snake_case']
tags: [serializer.normalizer]
将该代码放在app / config / services.yaml中,位于“services”部分。