2016-05-26 8 views
1

私は、オプションのパラメータにParamConverterを使用しようとしているParamConverterオプションですが、有効な

/** 
* @Route("/item", name="item_new") 
* @Route("/item/{id}", name="item") 
* @ParamConverter("item", class="AppBundle:Item") 
*/ 
public function stepStockReceptionAction(Item $item = null) 
{ 
    return new Response($item ? $item->getName() : 'New item'); 
} 

$itemはオプションになりましたが、私は無効な項目IDを与えれば、それは単純に考えられているnull

GET /item/42 # <-- Non existant item 

新アイテム

を与えます

アイテムが存在しない場合、どのようにデフォルトの404エラーを発生させることができますか?

+1

はのためにsymfonyに動作しないことがありますあなたはこれを試してみました: '@ParamConverter(" item "、class =" AppBundle:Item "、isOptional =" true ")'? –

+1

私は別のアクションメソッド(別の責任を持っているようです)と2つのルートを吐くことをお勧めします – Matteo

+0

@awons isOptionalのparamと同じ動作 –

答えて

1

いくつかの物事がボンネットの下に起こるdocumentation

に言ったように:

コンバータはSensioBlogBu​​ndleを取得しようとします:リクエスト属性 要求属性(からPostオブジェクトは、ルートプレースホルダ から来ています - ここでid);

Postオブジェクトが見つからない場合、404応答が生成されます。

ですから、ルートやParamConverterを定義する方法に関係なく、それはリクエストからidを取ると、このidで項目を見つけようとします。ですから、既存のアイテム

  • 使用して二つの方法、作成のための1つ、他の仕事への1つに2つの選択肢

    1. スプリットを持っているようなもの:
    
    /** 
    * @Route("/item/{id}", defaults={"id"=null}, name="work_with_item") 
    */ 
    public function stepStockReceptionAction(Request $request) 
    { 
        $item = $this->getDoctrine()->getRepository('AppBundle:Project')->find($request->query->get('id')); 
    
        return new Response($item ? $item->getName() : 'New item'); 
    }  
    
  • 関連する問題