Symfony5控制器函数中如何定义实体且无需在路由中携带实体ID
解决方案
根本原因
你当前的实现依赖Symfony的ParamConverter组件从路由参数中读取ID,自动查询对应的Adresse、Employes、Contact实体注入到控制器参数中,因此必须在路由中携带三个ID参数。要实现无参数的路由,只需移除这三个自动注入的实体参数,改为手动实例化或按需查询实体即可。
适配场景1:表单用于新增数据
如果三个表单都是用于提交新增数据,不需要绑定已有实体,直接实例化空实体绑定表单即可:
/** * @Route("/companyProfile", name="company_profile") */ public function index(ContactRepository $contactrepository, EmployesRepository $employesrepository , AdresseRepository $adresserepository ): Response { $contactform = $this->createForm(ContactType::class, new Contact()); $employesform = $this->createForm(EmployesType::class, new Employes()); $adresseform = $this->createForm(AdresseType::class, new Adresse()); return $this->render('companyProfile.html.twig', [ 'Contact' => $contactrepository->findAll(), 'Employes' => $employesrepository->findAll(), 'Adresse' => $adresserepository->findAll(), 'contactform' => $contactform->createView(), 'employesform' => $employesform->createView(), 'adresseform' => $adresseform->createView() ]); }
适配场景2:表单用于编辑当前登录用户关联的实体
如果需要绑定和当前登录用户关联的已有实体,通过Symfony的Security组件获取当前用户后查询关联实体即可:
/** * @Route("/companyProfile", name="company_profile") */ public function index(Security $security, ContactRepository $contactrepository, EmployesRepository $employesrepository , AdresseRepository $adresserepository ): Response { // 获取当前登录用户 $currentUser = $security->getUser(); // 按实际业务关联逻辑获取对应实体,示例为User实体直接关联三个目标实体 $adresse = $currentUser->getAdresse(); $employes = $currentUser->getEmployes(); $contact = $currentUser->getContact(); $contactform = $this->createForm(ContactType::class, $contact); $employesform = $this->createForm(EmployesType::class, $employes); $adresseform = $this->createForm(AdresseType::class, $adresse); return $this->render('companyProfile.html.twig', [ 'Contact' => $contactrepository->findAll(), 'Employes' => $employesrepository->findAll(), 'Adresse' => $adresserepository->findAll(), 'contactform' => $contactform->createView(), 'employesform' => $employesform->createView(), 'adresseform' => $adresseform->createView() ]); }
注意事项
你原有代码存在变量大小写不匹配的问题:方法参数声明的是小写开头的$adresse、$employes、$contact,创建表单时用的是大写开头的$Adresse、$Employes、$Contact,PHP对变量名大小写敏感,该问题会直接触发变量未定义错误,修改时需同步修正。
内容的提问来源于stack exchange,提问作者Taekook Bts
相关产品推荐
相关产品推荐

