如何使用symfony2从数据库中恢复数据

时间:2016-04-18 09:37:11

标签: symfony doctrine

我需要显示我的数据库中的产品信息,但我有一个

  

错误:控制器   “UserBundle \ Controller \ DefaultController :: profileAction()”需要   你为“$ id”参数提供了一个值(因为没有   默认值或因为此后有一个非可选参数   一个)。

这是profileAction:

public function profileAction($id)
    {
      $product = $this->getDoctrine()
        ->getRepository('UserBundle:Product')
        ->find($id);
        if (!$product) {
        throw $this->createNotFoundException(
            'No product found for id '.$id
    );
        }
      return $this->render('UserBundle:Default:profile.html.twig', array('product' =>$product));
}
请某人帮助我。

3 个答案:

答案 0 :(得分:2)

您需要提供$ id作为参数。

将回报更改为:

return $this->render('UserBundle:Default:profile.html.twig', ['product' => $product, 'id' => $id]);

答案 1 :(得分:0)

你需要一条这样的路线:

_my_route:
    path: /my_path/{id}
    defaults: {controller: AcmeBundle:Default:profile}
    requirements:
        id: \d+

控制器中的操作:

public function profileAction($id)
{
  $product = $this->getDoctrine()
    ->getRepository('UserBundle:Product')
    ->find($id);
    if (!$product) {
    throw $this->createNotFoundException(
        'No product found for id '.$id
);
    }
  return $this->render('UserBundle:Default:profile.html.twig', array('product' =>$product));

您的视图中的链接或其他内容(希望您使用Twig):

<a  href="{{ path('_my_route', {'id':my_object.id}) }}"> Lorem ipsum </a>

应该可以。

编辑:

对于您的搜索功能,我会做一个类似

的路线
_profile:
    path: /profile
    defaults: {_controller:AcmeBundle:Default:profile}

控制器:

public function profileAction(Request $request){

    $form = $this->createForm(new SearchType());
    $products = null ;
    if($request->isMethod('POST')){
        $form->handleRequest($request);

        $value = ($form['search']->getData());// change de 'search' according to your form
        $em = $this->getDoctrine()->getManager() ;
        $product = $em->getRepository('UserBundle:Product')->find($value) ;
    }
     if(!$product) throw $this->createNotFoundException('your message');

    return $this->render('UserBundle:Default:profile.html.twig',array(
        'product' => $product
    ));
}

最后,您在视图中的表单:

<form method="POST" action="{{ path('_profile') }}">
//your code
</form> 

答案 2 :(得分:0)

我认为这里$ id变为null并且它会导致错误,因为$ id用于从db中获取数据,因此为$ id设置默认值check $ id将永远不会变为null或为空。一切顺利。