Symfony 6表单报错:变量ajouterNouveauProjet不存在求助
Symfony 6:变量"ajouterNouveauProjet"不存在问题排查
报错信息
Variable "ajouterNouveauProjet" does not exist.
Controller代码
<?php namespace App\Controller; use App\Entity\Projet; use App\Form\ProjetFormType; use Doctrine\ORM\EntityManagerInterface; use phpDocumentor\Reflection\Types\This; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class LandingPageController extends AbstractController { #[Route('/landingPage', name: 'app_landing_page')] public function index(): Response { return $this->render('landing_page/index.html.twig', [ 'controller_name' => 'LandingPageController', ]); } #[Route('/projet', name: 'projet')] public function projet(Request $request, EntityManagerInterface $em, ): Response { //On créé un nouveau produit $projet = new Projet(); $addProjetForm = $this->createForm(ProjetFormType::class, $projet); return $this->render('landing_page/projet.html.twig', [ 'ajouterNouveauProjet' => $addProjetForm->createView(), ]); } }
视图代码(projet.html.twig)
{% extends 'base.html.twig' %} {% block title %}Projet{% endblock %} {% block body %} {% include "landing_page/_menuDashboard.html.twig" %} <form class=" box " method="post"> <h1 class="title is-1">Mes projets</h1> {{ form_start(ajouterNouveauProjet) }} <div class="columns"> <div class="column"> {{ form_row(ajouterNouveauProjet.raisonSociale, { label: 'Raison Sociale', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.activite, { label: 'Activité', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.responsable, { label: 'Responsable', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.formeJuridique, { label: 'Forme Juridique', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.typeJuridique, { label: 'Type juridique', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.mail, { label: 'Adresse E-mail', attr: {class: 'input form-control'} }) }} </div> <div class="column"> {{ form_row(ajouterNouveauProjet.capital, { label: 'Capital', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.adresse, { label: 'Adresse', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.codePostal, { label: 'Code Postal', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.ville, { label: 'Ville', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.telephone, { label: 'Téléphone', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.siret, { label: 'SIRET', attr: {class: 'input form-control'} }) }} {{ form_row(ajouterNouveauProjet.naf, { label: 'NAF', attr: {class: 'input form-control'} }) }} </div> </div> <button type="submit" class="button is-info">Valider</button> {{ form_end(ajouterNouveauProjet) }} </form> {% endblock %}
排查建议
- 确认路由访问正确性:确保访问的是
/projet路由(对应name为projet的Action),若误访问/landingPage,视图不会收到目标变量。 - 清理缓存:Symfony缓存可能导致旧代码未更新,执行命令:
php bin/console cache:clear php bin/console cache:clear --env=prod # 生产环境 - 检查模板路径与文件名:确认
projet.html.twig位于templates/landing_page/目录下,文件名拼写完全一致(Linux系统区分大小写)。 - 排查包含模板的影响:暂时注释掉
{% include "landing_page/_menuDashboard.html.twig" %},验证是否因该模板错误导致变量无法正常传递。 - 验证表单创建逻辑:在控制器中添加
dump($addProjetForm->createView()); die;,检查是否成功生成表单视图;同时确认ProjetFormType类无语法错误。 - 修复控制器参数冗余:
projet方法参数末尾的多余逗号(EntityManagerInterface $em,)虽不违反语法,但可能引发解析异常,去掉后重新测试。
内容的提问来源于stack exchange,提问作者HyperVince
相关产品推荐
相关产品推荐

