Нормализатор верблюжьих ключей FOSRestBundle не работает

Это мой файл конфигурации:

// app/config/config.yml
fos_rest:
    body_listener:
        array_normalizer: fos_rest.normalizer.camel_keys

Я использую последнюю версию FOSRestBundle:

// composer.json
"friendsofsymfony/rest-bundle": "dev-master"

Это параметры моего поста:

// Post parameters
"first_name": "First name",
"last_name": "Last name",
"phone": "Phone"

Это мой контроллер:

/**
 * @ApiDoc(
 *      resource=true,
 *      description="Create a new user"
 * )
 *
 * @View()
 */
public function postAction(Request $request)
{
    $user = new User();
    $form = $this->createForm(new UserType(), $user);

    // Request post parameters are not camel cased
    // Parameters expected: firstName, lastName, phone
    // Parameters got: first_name, last_name, phone
    $form->handleRequest($request);

    if ($form->isValid()) {
        return 'valid';
    }

    return $user;
}

Проблема:

Параметры сообщения запроса не являются верблюжьими. Я получаю first_name, last_name, phone вместо firstName, lastName, phone. Я сделал то же самое, что и https://florian.voutzinos.com/blog/handling-camelcase-with-fosrestbundle/. Но это не сработало. Я что-то упускаю? Любые идеи? Спасибо.


person Sukhrob    schedule 11.09.2014    source источник


Ответы (2)


Это JMSSerializer, переименовывающий ваши имена полей. Попробуйте изменить стратегию именования. Поместите это в файл конфигурации вашего сервиса

XML

<services>
  <service id="jms_serializer.naming_strategy" class="JMS\Serializer\Naming\IdenticalPropertyNamingStrategy" />
</services>

YML

services:
  jms_serializer.naming_strategy:
    class: 'JMS\Serializer\Naming\IdenticalPropertyNamingStrategy'
person iamtankist    schedule 23.10.2014

В вашем конфиге опечатка? Вы пропустили четыре пробела перед array_normalizer, потому что это свойство body_listener

fos_rest:
    body_listener:
        array_normalizer: fos_rest.normalizer.camel_keys
person urville    schedule 16.09.2014
comment
Это не требуется. Пробовал, то же самое. В любом случае, спасибо за ваш ответ. - person Sukhrob; 20.09.2014
comment
Это правильно, не нужно менять конфигурацию JMS Serializer в services.yml! - person Alex; 07.06.2019