2015-10-19 13 views
6

Io uso la proprietà input dell'annotazione @ApiDoc per la specifica dei parametri della mia api che sono i campi della maschera.Come specificare il formato del parametro in Nelmio ApiDocBundle

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

data_class della forma è un'entità che hanno la convalida di vincolo per le proprietà.

Mi aspetto che nelmio api doc specifichi il formato del parametro come vincoli di validazione dell'entità, ma il formato è vuoto.

enter image description here

Come posso specificare i formati dei parametri in ApiDocBundle nelmio?


EDIT: forse scrivo una domanda cattiva.

possiamo specificare parser per input & output, se non specifichiamo parser per questi, invito tutti parser per input & output, allora tutti sono chiamati parser per UserType.

nelmio hanno un parser denominato ValidationParser che hanno un metodo denominato parseConstraint che fissano format per l'ingresso & uscita, ma questo metodo non viene chiamato per il mio documento, perché?

risposta

2

invio una richiesta pull che utilizza i metadati di convalida per la proprietà format.

si può vedere questo PRhere

0

Come si può vedere here è possibile specificare il filtro in annotazione come ha fatto esempio di documentazione.

Ecco parte di questo esempio:

/** 
* 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 senza filtri mancanza scrivere a mano, userò la mia forma come input e nelmio leggere la forma & entità convalide e usare quelli come formato per i parametri – ghanbari

5

colonna Formato è progettato solo per datetime, date e choice tipi.

Per datetime e date rappresenta il formato della data come Y-m-d H:i:s e la serie di scelte per choice.

Non ho trovato alcuna documentazione a riguardo, quindi ho dovuto consultare il codice sorgente. Questa è la classe FormTypeParser, il posto in cui viene effettivamente analizzato lo FormType ed è possibile vedere come viene impostato il campo del formato.

Nella classe FormTypeParserTest è possibile vedere come utilizzarlo. Basta passare il parametro stringa con il nome format per uno dei tipi disponibili e il parser lo gestirà.

AGGIORNAMENTO: È necessario definire i vincoli all'interno della classe FormType.

Ad esempio:

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'; 
    } 
} 

verrà analizzato in:

enter image description here

ValidationParser in doParse() metodo trova tutti i vincoli definiti nella classe FormType e poi esegue parseConstraint() metodo per ciascuno di essi .

È inoltre possibile utilizzare FormTypeParser come descritto sopra. Per esempio:

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'); 
} 

sarà analizzato come:

enter image description here

Speranza che aiuta ora!

+0

si prega di vedere la mia domanda, mi aggiorno it – ghanbari

+0

@ghanbari ha aggiornato la risposta – chapay

+0

grazie, funziona, ma in primo luogo, forza la ridefinizione di tutte le proprietà dell'entità nel tipo di modulo non è utile e in secondo luogo, non posso specificare il formato per altri campi come testo – ghanbari