我的表单有问题。
首先,在我的主要树枝中,我包括我用于表格的树枝:
{% include 'MainBundle::manage.html.twig'%}
控制器是mainController
控制器显示主枝中出现的所有内容。
表格的行动:
public function manageAction(Request $request){
$manageForm = $this->createFormBuilder()
->add('submitFile', FileType::class, array('label' => 'File to Submit'))
->add('send', SubmitType::class)->getForm();
if ($request->getMethod('post') == 'POST') {
// Bind request to the form
$manageForm->bindRequest($request);
// If form is valid
if ($manageForm->isValid()) {
// Get file
$file = $manageForm->get('submitFile');
$file->getData();
}
}
return $this->render('MainBundle::main.html.twig', array(
'manageForm' => $manageForm->createView()
));
}
的routing.yml
manage:
path: /manage
defaults:
_controller: MainBundle:Main:manage
requirements:
_method: POST
manage.html.twig
{% extends 'MainBundle::main.html.twig' %}
{% block content %}
<form action="" method="post">
{{ form_widget(manageForm) }}
<input type="submit" />
</form>
{% endblock %}
当我在route / main中运行时,我应该显示表单,但是我有错误
变量“manageForm”不存在。
我猜控制器不接受视图......
答案 0 :(得分:1)
在您的特定情况下 - 更改为以下内容。
return $this->render('MainBundle::manage.html.twig', array(
'manageForm' => $manageForm->createView()
));
如果你在其他树枝上延伸主/基部树枝,那么你需要渲染另一根树枝(总是)。
您传递给扩展树枝的参数将在您已扩展的树枝中可用(在本例中为main.html.twig),但它不起作用。
{% include 'MainBundle::manage.html.twig'%} // why ?
不要对main做任何事情 - 只需将其扩展为manage !!!!
我也看到了整体代码的其他问题。
<强>控制器:强> //更现代的方式,而不是手动检查请求方法
if ($form->isSubmitted()) {
if ($form->isValid()) {
// perform actions...
} else {
// was not valid...return error messages
}
}
<强> FORM 强>
<form action="" method="post"> // this is the oldschool way
{{ form_widget(manageForm) }}
<input type="submit" />
</form>
更好的东西......(我最近的一些编码例子)
{{ form_start(form, {'attr' : {'method' : 'post', 'enctype' : 'multipart/form-data', 'class' : 'test'}}) }}
{{ form_errors(form.resume) }}
{{ form_widget(form.resume, {'attr' : {'id' : 'file-upload-rec', 'class' : 'file-upload-rec js-file-upload-rec', 'accept' : '.pdf, .doc, .docx'}}) }}
{{ form_label(form.resume, 'select', {'label_attr' : {'class' : 'file-upload js-file-upload'}}) }}
{{ form_row(form._token) }}
{{ form_end(form, {'render_rest': false}) }}
PS。您可能还想阅读所有https://symfony.com/doc/current/forms.html
答案 1 :(得分:0)
您正在渲染main.html.twig
而不是manage.html.twig
。我想第一个使用importForm
变量,因此不会传递给视图。
如果没有,并且您确实需要呈现包含main.html.twig
的{{1}},那么为什么manage.html.twig
会延伸manage.html.twig
?要么彼此包含,要么彼此延伸,而不是两者兼而有之。
答案 2 :(得分:0)
您需要在包含模板的同时传递变量
{% include 'MainBundle::manage.html.twig' with {'manageForm': manageForm} %}
有关详细信息,请参阅https://twig.symfony.com/doc/2.x/tags/include.html
谢谢!