2015-10-19 2 views
6

Я использую свойство , свойство @ApiDoc аннотация для спецификации параметров моего api, которые являются полями формы.Как указать формат параметра в Nelmio ApiDocBundle

* @ApiDoc(
*  section="User", 
*  resource=true, 
*  input={ 
*   "class"="Nik\UserBundle\Form\UserType", 
*  }, 
*  .... 

data_class формы является объектом, который имеет ограничение для проверки свойств.

Я ожидаю, что nelmio api doc определит формат параметра в качестве ограничений проверки сущности, но формат пуст.

enter image description here

Как я могу указать форматы параметров в nelmio ApiDocBundle?


EDIT: может быть, я пишу плохой вопрос.

мы можем указать парсер для input & output, если мы не указать анализатор для них, это называют все парсер input & output, то все парсеры называются для UserType.

nelmio имеет анализатор имя ValidationParser, которые имеют метод с именем parseConstraint, которые устанавливают format для ввода & вывода, но этот метод не вызывается для моего документа, то почему?

ответ

2

Я представляю запрос на вытягивание, в котором используются метаданные проверки для свойства format.

вы можете увидеть это PRhere

0

Как вы можете видеть here, вы можете указать фильтр в аннотации, как это сделал пример документации.

Вот часть этого примера:

/** 
* This is the documentation description of your method, it will appear 
* on a specific pane. It will read all the text until the first 
* annotation. 
* 
* @ApiDoc(
* resource=true, 
* description="This is a description of your API method", 
* filters={ 
*  {"name"="a-filter", "dataType"="integer"}, 
*  {"name"="another-filter", "dataType"="string", "pattern"="(foo|bar) ASC|DESC"} 
* } 
*) 
*/ 
public function getAction() 
{ 
} 
+0

I не хочет записи фильтры вручную, я буду использовать мою форму в качестве входных данных и nelmio чтения формы и сущности валидаций и использовать их в качестве формата для параметров – ghanbari

5

колонка Формат предназначен только для datetime, date и choice типов.

Для datetime и date он представляет формат даты, такой как Y-m-d H:i:s и массив вариантов для choice.

Я не нашел никакой документации по этому вопросу, поэтому мне пришлось посмотреть исходный код. Это класс FormTypeParser, где фактически анализируется FormType, и вы можете видеть, как задано поле формата.

В классе FormTypeParserTest вы можете посмотреть, как его использовать. Просто передайте строковый параметр с именем format для одного из доступных типов, и анализатор обработает его.

ОБНОВЛЕНИЕ: Вы должны определить свои ограничения внутри класса FormType.

Например:

class TestType extends AbstractType 
{ 
    /** 
    * @Assert\Type("string") 
    * @Assert\Length(min="10", max="255") 
    * @Assert\Regex("/^[^<>]+$/i") 
    */ 
    private $title; 

    /** 
    * @Assert\Type("string") 
    * @Assert\Length(min="10", max="255") 
    * @Assert\Regex("/^[^<>]+$/i") 
    */ 
    private $content; 

    /** 
    * @Assert\Date() 
    */ 
    private $created; 

    public function getName() 
    { 
     return 'test'; 
    } 
} 

будет анализироваться в:

enter image description here

ValidationParser в doParse() метод находит все Препятствия, определенные в FormType классе, а затем выполняет parseConstraint() метод для каждого из них ,

Вы также можете использовать FormTypeParser, как описано выше. Например:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('created', 'date', array('label' => 'Created', 'format' => 'yyyy-MM-dd')) 
     ->add('color', 'choice', array('label' => 'Color', 'choices' => array('grey' => '#CCCCCC', 'red' => '#FF0000'))) 
     ->add('save', 'submit'); 
} 

будет анализироваться как:

enter image description here

Надеется, что это помогает сейчас

+0

см моего вопроса, я обновить это – ghanbari

+0

@ghanbari обновил ответ – chapay

+0

Благодарю вас, это работает, но в первую очередь я могу переопределить все свойства объекта в типе формы, не полезно, а во втором - я не могу указать формат для других полей как текст – ghanbari

Смежные вопросы