2015-07-02 109 views
1

我正在使用Symfony 2.6和FOS Rest軟件包。在Symfony 2中使用自定義的ParamConverter進行POST請求

用於PATCH,DELETE和GET請求的參數轉換器可以很好地工作並減少控制器操作中的代碼。但是,對於POST請求,我有一個問題。每次都會調用默認的\Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter。這導致一個例外:

無法猜測如何從請求信息中獲取Doctrine實例。

我檢查了\Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener,發現它總是包括在onKernelController方法教條PARAM轉換器。從文檔似乎學說PARAM轉換器將自動適用於所有類型的暗示控制器動作,除非你把它設置爲off:

sensio_framework_extra: 
    request: 
     converters: true 
     auto_convert: false 

,我發現了一種哈克的方式來防止這種情況。要應用的參數轉換器數組將通過控制器方法中的類型提示參數的名稱(symfony通過反射獲取)索引。如果我只是命名我的param轉換器與這種類型的提示相同,那麼默認的教義param轉換器將不會被添加到param轉換器的列表中。例如:

 ... 
    * @ParamConverter(
    * "MyEntity", 
    * class="Foo\Bar\MyEntity", 
    * converter="my_custom_converter" 
    *) 
    * 
    * @param MyEntity $myEntity 
    * @return MyEntity 
    */ 
    public function postMyEntityAction(MyEntity $myEntity) 
    { 

我有點寫了這個問題,因爲我是在深入到代碼中,我也不很確定我的問題是什麼了。我想這是「應用多個參數轉換器合乎邏輯嗎?」或者還想知道是否可以關閉參數轉換器以執行某些操作。也許我的邏輯在這裏是完全錯誤的,這不是param轉換器的目的。

我會很感激任何建議。

回答

1

好吧,我意識到我哪裏出錯了。這是一個簡單的情況,不從我的自定義paramConverter apply方法返回true。如果它返回true,那麼doctrine param轉換器將不會被應用。