我需要显示我的数据库中的产品信息,但我有一个
错误:控制器 “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));
}
请某人帮助我。
答案 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或为空。一切顺利。