我有这个
{% block form_row %}
<div class="form-group">
{{ form_label(form) }}
{{ form_widget(form) }}
</div>
{% endblock form_row %}
用于覆盖主要的Twig表单字段。
但是我需要标签不同,具体取决于正在呈现的表单字段的类型。
如何在此处获取该内容,然后调用其他内容而不是form_label
?
我本来希望能够做到这一点,这是因为它出现的标签出现在复选框的输入之后,但是我想要反转它/自定义它。
{% block form_row %}
<div class="form-group">
{% if(type is checkbox) %}
// checkbox label here
{% else %}
{{ form_label(form) }}
{% endif %}
{{ form_widget(form) }}
</div>
{% endblock form_row %}
答案 0 :(得分:2)
您可以覆盖用于呈现特定表单类型的块。
例如,如果要覆盖电子邮件输入的标签模板,则应覆盖email_label块:
{% block email_label %}
This is the template used for all email input
{% endblock %}
{% block form_label %}
This is the fallback template for all other input types
{% endblock %}
您可以查看form.vars.block_prefixes
。
例如,对于“email”类型的“personnal_email”字段,它将包含:
array:4 [▼
0 => "form"
1 => "text"
2 => "email"
3 => "_form_personnal_email"
]
这意味着您可以覆盖块(从不太具体的一个开始)form_(widget|label|error)
,text_(widget|label|error)
,email_(widget|label|error)
和_form_personnal_email_(widget|label|error)
(最后一个用于覆盖渲染一个非常具体的领域)。
它能回答你的问题吗?
<强>更新强>
这是你要做的事情:
{% block form_row %}
<div class="form-group">
{{ form_label(form) }}
{{ form_widget(form) }}
</div>
{% endblock %}
{% block checkbox_label %}
<!-- Your checkbox specific label -->
{% endblock %}
您无法访问type
块中的form_row
,因为它仅在form_widget的子块中定义(例如,请参阅here)
答案 1 :(得分:0)
您可以使用自定义格式:
<div class="form-group">
{{ form_label(form.your_value, 'Your Title of field', { 'label_attr': {'class': 'col-sm-3 control-label'} }) }}
<div class="col-sm-9">
{{ form_widget(form.your_value, { 'attr': {'class': 'form-control selectJS'} }) }}
</div>
</div>
或者您可以使用FormType(如果您生成实体,这是Form文件夹中的文件),如:
<?php
namespace Ens\YourBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class NoticeType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title','text', array(
'label'=>'Title',
'label_attr'=>array( 'class'=>'col-sm-3 control-label' ),
'attr'=>array( 'class'=> 'form-control')
))
->add('text', 'textarea', array(
'label'=>'Text',
'label_attr'=>array( 'class'=>'col-sm-3 control-label' ),
'attr'=>array( 'class'=> 'form-control')
))
->add('keep_on_top','checkbox', array(
'label'=>'Keep on top',
'required'=>false
))
->add('start', 'date', array(
'attr'=>array( 'class'=> 'hidden')
))
->add('end', 'date', array(
'attr'=>array( 'class'=> 'hidden')
))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Ens\YourBundle\Entity\Notice'
));
}
/**
* @return string
*/
public function getName()
{
return 'notice';
}
}