Forms Symfony-以生成的形式添加文本
我想做一些非常简单的事情,但我不知道如何管理它。我有一张表格:Forms Symfony-以生成的形式添加文本,forms,symfony,twig,Forms,Symfony,Twig,我想做一些非常简单的事情,但我不知道如何管理它。我有一张表格: {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} 其中有几个文本字段。我想在两个文本字段(比如在名称文本字段和描述文本字段之间)之间“插入”一些文本(比如我的文本)。表单是使用表单生成器工具生成的。我试过这样的方法: $builder ->add('stuffName') // works well (text field 1)
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
其中有几个文本字段。我想在两个文本字段(比如在名称
文本字段和描述
文本字段之间)之间“插入”一些文本(比如我的文本
)。表单是使用表单生成器工具生成的。我试过这样的方法:
$builder
->add('stuffName') // works well (text field 1)
->add('addedText', 'text', array('label' => 'my Text')) // Trouble here!
->add('stuffDescription'); // works well (text field 2)
但它会生成一个文本字段(而不是简单的文本)。我不在乎文本是在form builder中设置还是直接在twig模板中设置。。。只要它在我的两个文本字段之间。有什么想法吗
非常感谢 Symfony表单只包含表单字段。您需要的任何其他内容都必须由模板添加
这意味着您必须逐个字段输出表单。例如,您的表单可能如下所示:
{{ form_start(form) }}
{{ form_row(form.stuffName) }}
<p>Your Text</p>
{{ form_row(form.stuffDescription) }}
{{ form_end(form) }}
{{form_start(form)}
{{form_行(form.stuffName)}}
你的文字
{{form_row(form.stuffDescription)}
{{form_end(form)}}
有关如何自定义表单呈现的更多信息,请参阅Symfony文档中的。这里是一个示例代码,可以自我解释
{{ form_start(form, { 'attr': { 'class': 'form-horizontal form-bordered'} }) }}
<div class="form-group">
<div class="col-md-3 ">
{{ form_label(form.User, 'Label text', { 'attr': {'class': 'control-label'} }) }}
</div>
<p>You are free to add whatever you want here</p>
<div class="col-md-9">
{{ form_widget(form.User, { 'attr': {'class': 'form-control'} }) }}
</div>
</div>
{{ form_rest(form) }}
{{ form_end(form) }}
{{form_start(form,{'attr':{'class':'form horizontal form bordered'}}}}
{{form_label(form.User,'label text',{'attr':{'class':'control label'}}}}}
你可以在这里随意添加任何你想要的内容
{{form_小部件(form.User,{'attr':{'class':'form control'}}}}
{{form_rest(form)}
{{form_end(form)}}
在任何情况下,这个问题都非常清楚,并且很好地解释了这一点。这个问题中的关键字是生成的 假设您在Symfony中构建了一个表单生成器。您有表单、字段和字段项等实体(选择框的选项或单选按钮字段的按钮) 因此,您有了这些实体,并创建了一个服务来从数据创建表单。在构建表单的服务中($this->buildedForm-generated form,$page->getFormData()-将数据放入构建的表单):
$this->buildedForm=$this->formFactory->create(
“形式”,
$page->getFormData(),
['action'=>'/page/formview/。$task->getId()]
);
foreach($fields作为$field){
$fieldBuilderMethod='construct'.ucfirst($field->getType())'field';
如果(方法_存在($this$fieldBuilderMethod)){
$this->$fieldBuilderMethod($field);
}
}
返回$this->buildedForm;
每种类型都有相应的方法,例如(Symfony 2的示例):
现在,您可以创建自定义表单类型,将文本粘贴到生成的表单中(它可以放置在捆绑包的表单文件夹中,并使用名称空间“use”检索):
这个自定义字段中有什么
namespace Myproject\MyBundle\Form\TaskTypes;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SimpletextType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'disabled' => true,
'required' => false,
'mapped' => false,
]);
}
public function getParent()
{
return 'text';
}
public function getName()
{
return 'simpletext';
}
}
整个魔法都在模板中显现出来。对于自定义表单类型,需要创建自定义主题(请参见)。在那里:
{%block simpletext_label%}{%endblock%}
{%block simpletext_widget%}
{{form.vars.data}
{%endblock%}
{%block simpletext_errors%}{%endblock%}
请参阅,字段小部件中没有标签,没有错误(它只是一个文本),只有文本。使用动态模板生成表单非常方便。不知道我怎么会错过这一点。。谢谢,我在看“定制表单”文件。
private function constructSimpletextField(FormField $field)
{
$this->buildedForm->add(
$field->getFieldName(),
new SimpletextType(),
[
'label' => $field->getName(),
'data' => $field->getPlaceholder(),
]
);
}
namespace Myproject\MyBundle\Form\TaskTypes;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SimpletextType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'disabled' => true,
'required' => false,
'mapped' => false,
]);
}
public function getParent()
{
return 'text';
}
public function getName()
{
return 'simpletext';
}
}