Symfony 4 - используйте простой инжектор сущностей в маршруте - PullRequest
0 голосов
/ 04 июня 2018

Используя Symfony 4.0, я пытаюсь внедрить свою сущность, используя мой маршрут.

Вот мой контроллер:

   /**
     * @param TblResidence $tblResidence
     * @return \Symfony\Component\HttpFoundation\Response
     * @Route("/residences/{res_id}", name="residences_view")
     */
    public function view(TblResidence $tblResidence)
    {
        return $this->render('residences/view.html.twig', [
            'residence' => $tblResidence,
        ]);
    }

А вот моя сущность:

/**
 * TblResidence
 *
 * @ORM\Table(name="tbl_residence", indexes={@ORM\Index(name="syn_id", columns={"syn_id"}), @ORM\Index(name="uti_id_crea", columns={"uti_id_crea"}), @ORM\Index(name="uti_id_maj", columns={"uti_id_maj"}), @ORM\Index(name="exp_id", columns={"exp_id"}), @ORM\Index(name="res_code", columns={"res_code"}), @ORM\Index(name="mar_id", columns={"mar_id"}), @ORM\Index(name="not_id", columns={"not_id"}), @ORM\Index(name="seg_id", columns={"seg_id"})})
 * @ORM\Entity
 */
class TblResidence
{
    /**
     * @var int
     *
     * @ORM\Column(name="res_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $resId;

    ....

И сейчас я получил эту ошибку:

Контроллер "App \ Controller \ ResidencesController :: view ()" требует, чтобы вы указали значение для аргумента "$ tblResidence".Либо аргумент имеет значение NULL, и значение NULL не было предоставлено, значение по умолчанию не было предоставлено, либо после этого есть необязательный аргумент.

Не думаю, что мне нужно использовать ParamConverter(если честно, я не нашел документации по SF4 по этому поводу), так как я просто хочу сопоставить, используя ID.Я пытался resId, id, res_id в качестве имени параметра, все та же ошибка.

Я что-то пропускаю (да, конечно, я делаю)?

РЕДАКТИРОВАТЬ

Я установил этот пакет от композитора:

composer require sensio/framework-extra-bundle

И теперь, когда он работает, ParamConverter, похоже, зависит от этого пакета.

Дополнительная информация: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Ваш параметр должен называться resId, как в вашей сущности.Если вы хотите использовать другое имя, вы должны явно указать аннотацию @ParamConverter: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#doctrine-converter

/**
 * @param TblResidence $tblResidence
 * @return \Symfony\Component\HttpFoundation\Response
 * @Route("/residences/{resId}", name="residences_view")
 */
public function view(TblResidence $tblResidence = null)
{
    return $this->render('residences/view.html.twig', [
        'residence' => $tblResidence,
    ]);
}
0 голосов
/ 04 июня 2018

Я установил этот пакет из composer:

composer требуется sensio / framework-extra-bundle

И теперь он работает, кажется, что ParamConverter зависит от этого пакета.

Дополнительная информация: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

И используйте имя поля из Entity:

   /**
     * @param TblResidence $tblResidence
     * @return \Symfony\Component\HttpFoundation\Response
     * @Route("/residences/{resId}", name="residences_view")
     */
    public function view(TblResidence $tblResidence)
    {
        return $this->render('residences/view.html.twig', [
            'residence' => $tblResidence,
        ]);
    }
0 голосов
/ 04 июня 2018

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

Что-то подобное должно делать эту работу (где $tblResidenceидентификатор вашей организации).

/**
 * @param TblResidence $tblResidence
 * @return \Symfony\Component\HttpFoundation\Response
 * @Route("/residences/{tblResidence}", name="residences_view")
 */
public function view(TblResidence $tblResidence = null)
{
    return $this->render('residences/view.html.twig', [
        'residence' => $tblResidence,
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...