我是Symfony的新手,我试图将对象从列表传递给新页面:
<a href="{{ path('fooUpdate', { 'id': item.id }) }}">Update</a>
foo对象的 ({% for item in list %})
列表很好,对象从数据库中充分加载,但是由于此学说错误,该链接不起作用:
The identifier id is missing for a query of AppBundleEntityFoo
这是foo类:
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
* @ORMTable(name="foo")
*/
class Foo {
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue
*/
private $id;
/**
* @ORMColumn(type="string")
*/
private $description;
//getters and setters
这是控制器方法:
/**
* @Route("/foo/fooUpdate/", name="fooUpdate")
*/
public function updateAction($id, Request $request) {
$foo = $this->getDoctrine()->getRepository('AppBundle:Foo')->find($id);
return $this->render('/foo/fooUpdate.html.twig', array(
'foo' => $foo
));
}
链接本身看起来正常工作,因为错误的URL为:
http://127.0.0.1:8000/foo/fooUpdate/?id=1
所以我想念什么?
另外,是否有任何方法可以使用帖子进行此操作,因此ID不会出现在URL中?
您缺少路由中的ID:
@Route("/foo/fooUpdate/{id}", name="fooUpdate")
实际上,您还应该设置默认值:
/**
* @Route("/foo/fooUpdate/{id}",
* defaults={"id" = 0},
* name="fooUpdate")
*/
如果您不在参数中,则使用默认值。
至于未在URL中设置ID,请查看会话:https://symfony.com/doc/current/current/components/http_foundation/sessions.html
您应该能够做到这一点,但这是更多的工作(编码)。