2016-05-10 4 views
0

json rest APIのリクエストアクションのリクエストフィルタを作成し、DTOを満たして検証し、paramconverterのようなコントローラのアクションで注入する必要があります。Symfony REST DTOの検証とモデルのparamconverterのようなモデルへの挿入

どうすればいいですか?

私はこのようなDTOています

class ExampleDTO 
{ 
    /** 
    * @var string 
    * 
    * @NotNull(message="El campo nombre es requerido") 
    * @Type(name="string", message="El campo nombre tiene un tipo incorrecto") 
    */ 
    private $nombre; 

    /** 
    * @return string 
    */ 
    public function getNombre() 
    { 
     return $this->nombre; 
    } 

    /** 
    * @param string $nombre 
    */ 
    public function setNombre($nombre) 
    { 
     $this->nombre = $nombre; 
    } 


} 

は今、私はこのDTOにJSONを変換し、コントローラに注入します。

+0

あなたの質問は、いくつかの部分を持っており、それが私にははっきりしていないあなたを手放す:

/** * @ParamConverter("dto", converter="fos_rest.request_body", options={"validator"={"groups"={"foo", "bar"}}}) */ public function putAction(ExampleDTO $exampleDTO, ConstraintViolationListInterface $validationErrors) { if (count($validationErrors) > 0) { // Handle validation errors } // ... } 

はまた、あなたは、このアプローチのためにこの方法をアプリconfiurationを調整する必要があります約尋ねている。マニュアルでは、独自のパラメータ変換ツールをプラグインする方法を示しています。http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#creating-a-converter – Cerad

+0

オブジェクトをリクエストしてオブジェクトに変換し、コントローラーで使用してください。 – Serginho

答えて

2

実際、ParamConverterはリクエストボディではなく、ルートパラメタ( "/myapp.com/post/{id}"の{id}のように)で動作します。

FOSRestBundleを使用する場合は、リクエストボディコンバーターリスナー(http://symfony.com/doc/current/bundles/FOSRestBundle/request_body_converter_listener.html)を使用できます。 FOSRestBundleドキュメントから

簡単な例:

# app/config/config.yml 
sensio_framework_extra: 
    request: { converters: true } 


# app/config/config.yml 
fos_rest: 
    body_converter: 
     enabled: true 
関連する問題