使用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;
....
现在我收到了这个错误:
Controller" App \ Controller \ ResidencesController :: view()"要求 你为" $ tblResidence"提供了价值。论点。要么是 参数可以为空,并且没有提供空值,没有默认值 已提供值或因为存在非可选参数 在这之后。
我认为我不需要使用ParamConverter(说实话,我没有为SF4找到关于它的文档),因为我只想使用ID进行匹配。我尝试resId
,id
,res_id
作为参数名称,仍然是同样的错误。
我是否会遗漏某些东西(是的,我当然会这样做)?
修改
我从composer安装了这个包:
composer require sensio/framework-extra-bundle
现在它可以工作,ParamConverter似乎依赖于这个包。
更多信息:https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html
答案 0 :(得分:2)
您的参数必须像实体一样调用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,
]);
}
答案 1 :(得分:0)
我认为您必须将$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,
]);
}
答案 2 :(得分:0)
我从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,
]);
}