我正在使用MngoDBbundle使用symfony2.16中产品的id更新值
但我收到的错误就是这样
在渲染模板期间抛出异常(“The “acme_store_update”路由有一些缺少的必需参数 (“id”)。“)在AcmeStoreBundle中:默认值:index.html.twig在第1行。
这是我的控制器请检查更新操作
<?php
namespace Acme\StoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Acme\StoreBundle\Document\Product;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends Controller
{
/**
* @Route("/hello/{name}")
* @Template()
*/
public function indexAction($name)
{
return array('name' => $name);
}
// ...
/**
* @Route("/create", name="acme_store_create")
* @Template()
*/
public function createAction(Request $request)
{
$product = new Product();
//$product->setName('apple');
//$product->setPrice('19.99');
$form = $this->createFormBuilder($product)
->add('name', 'text')
->add('price', 'text')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$req = $request->request->get('form');
$product->setName($req['name']);
$product->setPrice($req['price']);
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->persist($product);
$dm->flush();
return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
}
}
return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
// ...
/**
* @Route("/show/{id}", name="acme_store_show")
* @Template()
*/
public function showAction($id)
{
$product = $this->get('doctrine.odm.mongodb.document_manager')
->getRepository('AcmeStoreBundle:Product')
->find($id);
if (!$product) {
throw $this->createNotFoundException('No product found for id '.$id);
}
return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
// do something, like pass the $product object into a template
}
// ...
/**
* @Route("/update/{id}", name="acme_store_update")
* @Template()
*/
public function updateAction(Request $request,$id)
{
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$product = $dm->getRepository('AcmeStoreBundle:Product')->find($id);
$form = $this->createFormBuilder($product)
->add('name', 'text')
->add('price', 'text')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$req = $request->request->get('form');
$product->setName($req['name']);
$product->setPrice($req['price']);
$dm->flush();
return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
}
}
return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
// ...
}
我的index.html.twig是
<form action="{{ path('acme_store_update') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" />
</form>
如何使用id更新值请帮帮我
答案 0 :(得分:4)
将$id
添加到模板变量:
return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
'form' => $form->createView(),
'product_id' => $id,
));
并在您的模板中将product_id
参数添加到path
函数:
<form action="{{ path('acme_store_update', {id: product_id}) }}" method="post" {{ form_enctype(form) }}>
....
答案 1 :(得分:3)
在我的情况下,错误不在错误输出的模板文件中,而是在TWIG文件中,它正在扩展。在我使用的twig文件中:
path( app.request.attributes.get('_route'))
..尝试获取URL路径。这会产生错误,因为未提供必需的参数。
我使用正确的方式获取网址:
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
..错误消失了。
答案 2 :(得分:0)
在其路由文件中错误地键入了Id而不是令牌,因此发生此错误
(在呈现模板期间抛出异常(“acme_store_update
路由在AcmeStoreBundle中有一些缺少必需参数(id
)。”):默认值:index.html.twig在第1行。 )
例如:in .yml文件 ibw_job_edit:
pattern: /{id}/edit
defaults: { _controller: "IbwJobeetBundle:Job:edit" }
而不是你必须写 ibw_job_edit:
pattern: /{token}/edit
defaults: { _controller: "IbwJobeetBundle:Job:edit" }