Поддерживает ли nelmioApiDocBundle нормализаторы сериализатора Symfony и преобразователи имен? - PullRequest
0 голосов
/ 26 мая 2018

Я работаю над Symfony 3.4 API.Я хочу создать документацию для API, используя nelmioApiDocBundle v3.2 , но я сталкиваюсь с некоторыми препятствиями.Для сериализации и нормализации я использую сериализатор Symfony, но я не могу заставить nelmioApiDocBundle использовать нормализаторы и преобразователь имен, сконфигурированные для сериализатора Symfony при использовании аннотации @ SWG \ Model .

В частности, я использую serializer.name_converter.camel_case_to_snake_case и DateTimeNormalizer

Я также использую FosRestBundle v2.0

Вотмоя конфигурация:

//config.yml

framework:    
    serializer:
        name_converter: 'serializer.name_converter.camel_case_to_snake_case'

nelmio_api_doc:
    areas:
        path_patterns:
            - ^/api(?!/doc$)
    documentation:
        host: example.com.ar
        schemes: [https]
        info:
            title: MyApp
            description: ...
            version: 1.0.0
    securityDefinitions:
        Bearer:
            type: apiKey
            description: 'Value: Bearer {jwt}'
            name: Authorization
            in: header
    security:
        - Bearer: []

fos_rest:
    body_listener:
        enabled: true
        array_normalizer: fos_rest.normalizer.camel_keys

Контроллер:

// UserController

/**
 * Create new user
 *
 * @Post("/user/new")
 *
 * @SWG\Parameter(
 *     name="user",
 *     in="body",
 *     @SWG\Schema(type="object",
 *         @SWG\Property(property="user", ref=@Model(type=UserType::class))
 *     )  
 * )
 * @SWG\Response(
 *      description="Creates a new User",
 *      response=201,
 *      @SWG\Header(
 *          header="Location",
 *          description="The location of the newly created object",
 *          type="string"
 *      )
 *  )
 * @SWG\Tag(name="users")
 * @ApiDocSecurity(name="Bearer")
 *
 */
public function postUserAction(Request $request)

И formType:

class UserType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('apellido')
            ->add('tipoDeDocumento')
            ->add('nroDeDocumento')
            ->add('fechaDeNacimiento', DateType::class, array(
                'widget' => 'single_text',
                'documentation' => [
                    'type' => 'string',
                    'example' => '2018-02-22T13:23:08-03:00',
                ],
            ))
            ->add('direccion')
            ->add('email')
            ->add('telefono')
            ->add('password')
        ;
    }

Обратите внимание, что я добавил опцию «документация» в классе формыдля свойства date, но я хочу, чтобы он обрабатывался нормализатором.

Вот вывод в Swagger.ui

Заранее спасибо.

...