2017-02-23 4 views
2

エンティティでは、DoctrineExtensionでスラッグを定義しました。私はhrefで使用します。しかし、私はルータやParamConverterに問題があります。私のコントローラでルータと{slug}エンティティを取得する

/** 
* @Route("/{slug}", name="strain_view") 
* @ParamConverter("strain", class="AppBundle:Strain", options={ 
*  "repository_method" = "findOneWithAll", 
* }) 
* @Security("is_granted('STRAIN_VIEW', strain)") 
*/ 
public function viewAction(Strain $strain) 
{ 
    return $this->render('strain/view.html.twig', [ 
     'strain' => $strain, 
    ]); 
} 

そして、私はこのエラーをしました:デバッグバーで

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

、なるほど、問題は、アレイ内の配列です:

Parameters: [ 0 => [ slug => t1p-0004-e-coli-pgem-t-promupf3-leu2-termupf3 ] ]

@Route:{slug}を{id}で置き換え、手動でURLを入力すると、

Parameters: [0 => t1p-0004-e-coli-pgem-t-promupf3-leu2-termupf3]

そして...それは仕事だが、私のリポジトリに私がしました:

public function findOneWithAll($slug) 
{ 
    $query = $this->createQueryBuilder('strain') 
      ->where('strain.slug = :slug') 
      ->setParameter('slug', $slug) 
      ->getQuery(); 

私は理由を理解していません。

答えて

0

あなたはこの

/** 
* @Route("/{slug}", name="strain_view") 
* @Entity("strain", expr="repository.findOneWithAll(slug)") 
* @Security("is_granted('STRAIN_VIEW', strain)") 
*/ 
public function viewAction(Strain $strain) 
{ 
    return $this->render('strain/view.html.twig', [ 
     'strain' => $strain, 
    ]); 
} 
+0

おかげで、私は、docでそれを見てきたけど...私はない今、私はインポートする必要がどのクラス..私がタイプするとき、Entityで終わるすべてのことを試しましたが、私はいつも '[Semantical Error]メソッドの@Entityアノテーションはインポートされませんでした。この注釈に "use"ステートメントを追加するのを忘れたのでしょうか? – mpiot

+0

最後に、私はparamがidでないとき、彼はparamsの配列を作成すると思います。私はリポジトリ内の$ paramに名前を変更し、setParameter( 'slug'、$ param ['slug'])を実行します... – mpiot

+0

これは実際に何が起こるかです。 paramConverterで使用されるメソッドはfindOneByになりますので、paramsの配列が与えられます。私はインポートするアノテーションはDoctrine \ ORM \ Mapping \ Entityです。 – OlivierC

0

単純に試してみてください:

/** 
    * @ParamConverter("strain", options={"mapping": {"slug": "slug"}}) 
    */ 
関連する問題