PagesController.php
$id = $request->request->get('id');
$target = $request->request->get('target');
$EntityName = 'App\\Entity\\' . ucwords($slug);
$em = $this->getDoctrine()->getManager();
$cmf = $em->getMetadataFactory();
$classes = $cmf->getMetadataFor($EntityName);
if($request->request->get('target')){
$item = new $EntityName();
$item= $this->getDoctrine()->getRepository($EntityName)->find($id);
$formBuilder = $this->createFormBuilder($item);
foreach ($classes->fieldMappings as $fieldMapping) {
$formBuilder->add($fieldMapping['fieldName'], TextType::class, array('attr' => array('class' => 'form-control'), 'required' => true,));
}
$formBuilder->add('cancel', ButtonType::class, array('label' => 'Cancel','attr' => array('class' => 'cancel form-btn btn btn-default pull-right close_sidebar close_h')))
->add('save', SubmitType::class, array('label' => 'Save','attr' => array('id' => 'submit-my-beautiful-form','class' => 'form-btn btn btn-info pull-right','style' => 'margin-right:5px')));
$form = $formBuilder->getForm();
$form->handleRequest($request);
$response = new JsonResponse(
array(
'message' => 'Success',
'output' => $this->renderView('form.html.twig',
array(
'target' => $target,
'entity' => $item,
'form' => $form->createView(),
))), 200);
return $response;
} else {
$em = $this->getDoctrine()->getManager();
foreach ($classes->fieldMappings as $fieldMapping) {
$func = 'set'.$fieldMapping['fieldName'];
$args = $data['form['.$fieldMapping['fieldName'].']'];
$entity->$func($args);
}
$em->persist($entity);
$em->flush();
$response = new JsonResponse(array('id' => $data['form[id]']), 200);
return $response;
}
form.html.twig
<section class="content-header" style="margin-bottom:20px">
<h1 style="float:left;margin-bottom:30px">Create Entry </h1>
</section>
<section class="content" style="clear:left">
<div class="form-group">
{{ form_start(form) }}
{{ form_end(form) }}
</section>
我的表单运行良好,当我填写该表单并按“保存”按钮时,该表单存储在数据库中。 当我将所有字段留空并按“保存”时,什么也没有发生,并且出现500错误
执行'INSERT INTO成员(用户名, 密码,电子邮件,is_active)带有参数[“”的VALUES(?,?,?,?)' null,“”,“ 1”]:
SQLSTATE [23000]:违反完整性约束:1048列 “密码”不能为空
这真的很好,因为必填字段是必需的,但是即使我添加了“ required” =“ true”,错误也不会显示在表单中。
答案 0 :(得分:1)
因此,在使用表单构建器时,您可以访问:
$form->isSubmitted()
和
$form->isValid()
因此,您可以执行以下操作:
if ($form->isSubmitted() && $form->isValid()) {
// save to database
}
我们要先检查表单是否提交,再检查表单是否有效,就像没有提交表单一样,因为表单将为假,因此不必检查表单是否有效。
这将防止您的MySQL错误,因为技术上您的表单无效,并且您尝试刷新无效数据。显然,我们只想保存有效的数据。
当然,如果表单失败,您可以返回视图,并且可以在模板中访问
{{ form_errors() }}
这可能满足您的需求,但您也可以将类似的内容传递给模板
'formHasErrors' => $form->isSubmitted() && !$form->isValid(),
然后在您的模板中
{% if formHasErrors %}
您可能想做的其他事情,这使您可以更好地控制字段,将字段分开,如下所示:
{{ form_start(form) }}
{{ form_label(form.name) }}
{{ form_errors(form.name, {'attr': {'class': 'form-input'}}) }}
{{ form_widget(form.name) }}
{{ form_end(form) }}
捕捉错误并正确处理它们非常重要。您的实现未验证表单是否有效,这就是为什么您会收到500个错误的原因。