2017-11-14 8 views
2

私のプロジェクトでは、SymfonyとDoctrineを使用しています。そして私は奇妙な(私のために)事に気づいた。Symfony + Doctrine:アクションメソッドでの奇妙なパラメータの注入

は、私は私のコントローラで簡単なアクションを持っている:あなたは私の注釈で見ることができるよう

/** 
    * @param Request  $request 
    * @param Product|null $product 
    * 
    * @Config\Route("/{category}/create", name="my_project_create_product") 
    * @Config\Route("/{category}/edit/{product}", name="my_project_edit_product") 
    * @Config\Template() 
    * 
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
    */ 
    public function createEditAction(Request $request, ProductCategory $category, Product $product = null) 

製品のパラメータは、編集アクションのためのオプションで、使用しています。

私はurl/{category}/createを使用すると、何らかの形で製品オブジェクトが挿入されるという問題があります(これは、指定したカテゴリのコレクションの最初の製品です)。ただし、と予想される製品パラメータ。

私はそれをURLに渡さないと、製品パラメータがどのように注入されるのでしょうか?

P.Sこの製品には、カテゴリへの参照が含まれています。これは、メソッドでカテゴリパラメータを使用する場合にのみ発生します。

symfonyのバージョン3.3.4

はあなたの助けをありがとう!

答えて

1

いくつかの調査とデバッグの後、私は実際にその問題の解決策を見つけました。

実際にあなたのエンティティのプロパティ(非プロパティは無視されます)であるルート内のすべてのワイルドカードを使用して、ParamConverterがfindOneBy()フェッチを試みることは本当にわかりませんでした。 (source link)。したがって、id(主キー)で見つからない場合は、基準で検索しようとします。これを修正するいくつかの方法があります(すべてのオプションはhereです)。しかし、私は、製品のマッピングからカテゴリを除外することを選択した:

/** 
* @param Request  $request 
* @param Product|null $product 
* 
* @Config\Route("/{category}/create", name="my_project_create_product") 
* @Config\Route("/{category}/edit/{product}", name="my_project_edit_product") 
* @Config\ParamConverter("product", options={"exclude": {"category"}}) 
* @Config\Template() 
* 
* @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
*/ 
public function createEditAction(Request $request, ProductCategory $category, Product $product = null) 

実際に、この行は "@Config \ ParamConverter(" 製品 "オプション= { "除外":{ "カテゴリ"}})"問題全体を解決します。

希望すると、これは誰かを助け、時間を節約します。

関連する問題