Symfony 表单不提交数据 - POST 请求为空
Symfony form do not submit data - POST request is empty
我是 symfony 和 twig 模板的新手,我正在努力解决使用 Symfony 中的 formbuilder 创建的表单提交数据的问题。单击 "create" 按钮不提交数据。我创建了一个模板 addEmployee.html.twig,它使用导航栏和侧边栏扩展基本模板。
我注意到此表单仅在我不扩展基础时才有效。因此它会创建正确的请求并仅在创建表单的模板不存在时才提交表单有任何父模板。
我不知道为什么扩展 base.html.twig 模板会导致请求丢失,而且我不知道如何使用我已经创建的扩展模板来使它工作uild。
newEmployee 函数来自 MainController.php
/**
* @Route("/employee/add", name="add_employee")
* @Method({"GET","POST"})
*/
public function newEmployee(Request $request){
$employee = new Employee();
$form = $this->createFormBuilder($employee)
->setMethod('POST')
->add('employeeNumber',TextType::class, array('attr' => array('class'=>'form-control')))
->add('name',TextType::class, array('attr' => array('class'=>'form-control')))
->add('phone',TextType::class, array('attr' => array('class'=>'form-control')))
->add('pool',TextType::class, array('attr' => array('class'=>'form-control')))
->add('save',SubmitType::class, array('label'=>'Create','attr'=>array('class'=> 'btn btn-primary mt-3')))
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
}
if($form->isSubmitted() && $form->isValid()){
$employee=$form->getData();
$entityManager= $this->getDoctrine()->getManager();
$entityManager->persist($employee);
$entityManager->flush();
return $this->redirectToRoute('homepage');
}
return $this->render('/Employee/addEmployee.html.twig',array('form'=>$form->createView()));
}
addEmployee.html.twig'
{% extends 'base.html.twig' %}
{% block title%} New Article{% endblock %}
{% block body%}
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
{% endblock %}
base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}TL Manage{% endblock %}</title>
{% block stylesheets %}
<link rel="stylesheet" href="https://bootswatch.com/4/cosmo/bootstrap.min.css">
<link rel="stylesheet" href="../css/style.css">
{% endblock %}
</head>
<body>
{% include 'inc/navbar.html.twig' %}
{% include 'inc/sidebar.html.twig' %}
<div id="content">
{% block body %}{% endblock %}
</div>
{% block javascript %}
<!-- Icons.JS -->
<script src="https://unpkg.com/ionicons@4.5.5/dist/ionicons.js"></script>
<!-- JQUERY -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<!-- Popper.JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
<!-- Bootstrap JS -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
<!-- jQuery Custom Scroller CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js"></script>
<script src="js/main.js"></script>
{% endblock %}
</body>
</html>
而不是重定向到主页并插入数据
this is what happenes if I submit the form
并且在从 addEmployee.html.twig 表单中删除 {% extends 'base.html.twig' %}
后按预期工作。任何想法如何让它与 ui 的其余部分一起工作?
自己找了原因和解决方法,感觉很尴尬...
事实证明我在边栏中有另一个表单,它包含在基本模板中,但我没有关闭 <form>
标签...所以它是这样的:
inc/sidebar.html.twig
<form class="employee-Finder">
<input class="finder-input" type="text">
<form> <!-- this was the cause -->
所以第一个表单的提交按钮可能是提交侧边栏中默认具有 get 方法的按钮。关闭标签后一切正常。感谢您的所有建议。
我是 symfony 和 twig 模板的新手,我正在努力解决使用 Symfony 中的 formbuilder 创建的表单提交数据的问题。单击 "create" 按钮不提交数据。我创建了一个模板 addEmployee.html.twig,它使用导航栏和侧边栏扩展基本模板。
我注意到此表单仅在我不扩展基础时才有效。因此它会创建正确的请求并仅在创建表单的模板不存在时才提交表单有任何父模板。
我不知道为什么扩展 base.html.twig 模板会导致请求丢失,而且我不知道如何使用我已经创建的扩展模板来使它工作uild。
newEmployee 函数来自 MainController.php
/**
* @Route("/employee/add", name="add_employee")
* @Method({"GET","POST"})
*/
public function newEmployee(Request $request){
$employee = new Employee();
$form = $this->createFormBuilder($employee)
->setMethod('POST')
->add('employeeNumber',TextType::class, array('attr' => array('class'=>'form-control')))
->add('name',TextType::class, array('attr' => array('class'=>'form-control')))
->add('phone',TextType::class, array('attr' => array('class'=>'form-control')))
->add('pool',TextType::class, array('attr' => array('class'=>'form-control')))
->add('save',SubmitType::class, array('label'=>'Create','attr'=>array('class'=> 'btn btn-primary mt-3')))
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
}
if($form->isSubmitted() && $form->isValid()){
$employee=$form->getData();
$entityManager= $this->getDoctrine()->getManager();
$entityManager->persist($employee);
$entityManager->flush();
return $this->redirectToRoute('homepage');
}
return $this->render('/Employee/addEmployee.html.twig',array('form'=>$form->createView()));
}
addEmployee.html.twig'
{% extends 'base.html.twig' %}
{% block title%} New Article{% endblock %}
{% block body%}
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
{% endblock %}
base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}TL Manage{% endblock %}</title>
{% block stylesheets %}
<link rel="stylesheet" href="https://bootswatch.com/4/cosmo/bootstrap.min.css">
<link rel="stylesheet" href="../css/style.css">
{% endblock %}
</head>
<body>
{% include 'inc/navbar.html.twig' %}
{% include 'inc/sidebar.html.twig' %}
<div id="content">
{% block body %}{% endblock %}
</div>
{% block javascript %}
<!-- Icons.JS -->
<script src="https://unpkg.com/ionicons@4.5.5/dist/ionicons.js"></script>
<!-- JQUERY -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<!-- Popper.JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
<!-- Bootstrap JS -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
<!-- jQuery Custom Scroller CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js"></script>
<script src="js/main.js"></script>
{% endblock %}
</body>
</html>
而不是重定向到主页并插入数据 this is what happenes if I submit the form
并且在从 addEmployee.html.twig 表单中删除 {% extends 'base.html.twig' %}
后按预期工作。任何想法如何让它与 ui 的其余部分一起工作?
自己找了原因和解决方法,感觉很尴尬...
事实证明我在边栏中有另一个表单,它包含在基本模板中,但我没有关闭 <form>
标签...所以它是这样的:
inc/sidebar.html.twig
<form class="employee-Finder">
<input class="finder-input" type="text">
<form> <!-- this was the cause -->
所以第一个表单的提交按钮可能是提交侧边栏中默认具有 get 方法的按钮。关闭标签后一切正常。感谢您的所有建议。