私はsymfonyとtwigテンプレートに不慣れで、Symfonyのformbuilderによって作成されたフォームを使用してデータを送信する問題に苦労しています。「作成」ボタンをクリックしてもデータは送信されません。ナビゲーションバーとサイドバーでベーステンプレートを拡張するテンプレートaddEmployee.html.twigを作成しました。
このフォームは、ベースを拡張していない場合にのみ機能することに気づきました。そのため、フォームが作成されたテンプレートに親テンプレートがない場合にのみ、適切なリクエストが作成され、フォームが送信されます。
base.html.twigテンプレートを拡張するとリクエストが失われる理由がわかりません。また、既に作成した拡張テンプレートでそれを機能させる方法がわかりません。
MainController.phpのnewEmployee関数
/**
* @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/[email protected]/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>
ホームページにリダイレクトしてデータを挿入する代わりに、フォームを送信するとこれが発生します
{% extends 'base.html.twig' %}
addEmployee.html.twigから削除した後、フォームは意図したとおりに機能します。残りのUIパーツでそれを機能させる方法はありますか?
自分で原因と解決策を見つけて恥ずかしい思いをします...
ベーステンプレートに含まれているサイドバーに別のフォームがあり、<form>
タグを閉じなかったことがわかりました...したがって、次のようになりました。
inc / sidebar.html.twig
<form class="employee-Finder">
<input class="finder-input" type="text">
<form> <!-- this was the cause -->
したがって、最初のフォームの送信ボタンは、おそらくデフォルトでgetメソッドを持つサイドバーの送信ボタンでした。タグを閉じた後、すべて正常に動作します。すべての提案をありがとう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加