2016-12-28 3 views
0

Я новичок в Symfony, и я пытаюсь передать объект из списка на новую страницу с помощью:Symfony3 Идентификатор идентификатор отсутствует для запроса AppBundle Entity

<a href="{{ path('fooUpdate', { 'id': item.id }) }}">Update</a>

Список ({% for item in list %}) объектов Foo прекрасно, объекты полностью загружены из базы данных, но ссылка не работает из-за этой ошибки Doctrine:

The identifier id is missing for a query of AppBundle\Entity\Foo

Вот класс Foo:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="foo") 
*/ 
class Foo { 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue 
*/ 
private $id; 

/** 
* @ORM\Column(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 

Так что я упускаю ?

Кроме того, есть ли способ сделать это с помощью POST, поэтому идентификатор не будет отображаться в URL-адресе?

ответ

0

Вы пропускаете идентификатор в маршруте:

@Route("/foo/fooUpdate/{id}", name="fooUpdate") 
+0

О, спасибо! Это сработало, но любая идея о том, как это сделать через почту? – Eduardo

+0

Предполагая, что у вас есть форма или аналогичная информация для отправки ваших данных. Вы должны настроить свой маршрут как * @Method ({"POST"}), а затем в действии вашего контроллера вы получите сообщение vars. Saludos – Hokusai

0

На самом деле, вы должны также установить по умолчанию:

/** 
* @Route("/foo/fooUpdate/{id}", 
*  defaults={"id" = 0}, 
*  name="fooUpdate") 
*/ 

Значения по умолчанию используются в случае, если вы не передаете в качестве параметра.

Насколько не устанавливая идентификатор в URL, смотрите на сессии: https://symfony.com/doc/current/components/http_foundation/sessions.html

Вы должны быть в состоянии сделать это, но это больше работы (кодирование).