Хобрук: Ваш путь к мастерству в программировании

Symfony3 Идентификатор идентификатора отсутствует для запроса AppBundle\Entity\

Я новичок в symfony и пытаюсь передать объект из списка на новую страницу, используя:

<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-адресе?

28.12.2016

Ответы:


1

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

@Route("/foo/fooUpdate/{id}", name="fooUpdate")
28.12.2016
  • Ой ну спасибо! Это сработало, но есть идеи, как это сделать по почте? 29.12.2016
  • Предполагая, что у вас есть форма или что-то подобное для отправки данных вашего поста. Вы должны настроить свой маршрут как * @Method({POST}), затем в действии вашего контроллера вы получите сообщение vars. Салудос 29.12.2016

  • 2

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

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

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

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

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

    28.12.2016
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..