也许我忽略了一些东西,希望这很容易。
我有一张表格,我最终想要的是以下结果:
字段:
应该获得额外的a
- 标签后面的标签和额外的div,如果适用,请填写帮助和/或错误。
我需要做的是,必填字段使用以下内容获取a
- 标记:
{% use 'form_div_layout.html.twig' with field_label as base_field_label %}
{% block field_label %}
{{ block('base_field_label') }}
{% if required %}
<a href=""><span> </span></a>
{% endif %}
{% endblock %}
所以,我尝试过的是不同的版本:
{% use 'form_div_layout.html.twig' with field_label as base_field_label %}
{% block field_label %}
{{ block('base_field_label') }}
{% if required or help is defined %}
<a href=""><span> </span></a>
{% endif %}
{% endblock %}
{% block field_row %}
{% spaceless %}
<div class="row">
{% if required or help is defined %}
<div>
{{ form_errors(form) }}
{{ help }}
</div>
{% endif %}
{{ form_label(form) }}
{{ form_widget(form, { 'attr': {'class': 'grid_4'} }) }}
</div>
{% endspaceless %}
{% endblock field_row %}
我无法让它发挥作用。
所以我的问题是:
我从哪里获取帮助文本,也可以包含HTML?我在form builder
内尝试了这个但没有成功 - 但至少有一个例外:
$builder ->add('subject', 'text', array(
'label' => 'Subject',
'help' => 'Can be formatted content with <strong>HTML-Elements</strong>',
));
如何判断当前字段是否有错误(向行添加类),如果是,还会显示它? {{ form_errors(form) }}
没有输出任何内容,无论我把它放在`field_row˚。
答案 0 :(得分:6)
没有帮助文本,您必须为字段创建表单扩展并将其添加到默认选项。
SF 2.1 Beta 1中的示例:
namespace Webility\Bundle\WebilityBundle\Form\Extension;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormViewInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class HelpFormTypeExtension extends AbstractTypeExtension
{
public function buildView(FormViewInterface $view, FormInterface $form, array $options){
$view->setVar('help', $options['help']);
}
public function getExtendedType(){
return 'field';
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'help' => null
));
}
}
将其注册为服务:
<service id="webility.form.extension.help" class="Webility\Bundle\WebilityBundle\Form\Extension\HelpFormTypeExtension">
<tag name="form.type_extension" alias="field" />
</service>
对于错误问题: 你有印刷错误吗?如果验证失败,请在控制器中检查:
echo '<pre>'; print_r( $form->getErrorsAsString() ); echo '</pre>'; exit;
答案 1 :(得分:0)
如我的问题[{3}}中所述解决问题非常有帮助。
我在这种情况下以另一种方式解决了这个问题,我也想在这里发帖。根据手册Maciej Pyszyński's anwser,我建立了这个:
注意此解决方案无法与formbuilder
一起使用,需要在树枝中进行一些调整。
{% block field_label %}
{{ block('base_field_label') }}
{% if attr.class is defined and '_hint' == attr.class %}
<div>
<a><span class="help">Help Icon</span></a>
<div class="tooltip">
{% if help is defined %}
{{ help|raw }}
{% else %}
Somebody forgot to insert the help message
{% endif %}
</div>
</div>
{% endif %}
{% endblock %}
{% block field_row %}
{% spaceless %}
<div class="row{% if form_errors(form) %} error{% endif %}">
{{ form_label(form) }}
{{ form_widget(form, { 'attr': {'class': 'grid_4'} }) }}
</div>
{% endspaceless %}
{% endblock field_row %}
<div class="row{% if form_errors(form.url) %} _error{% endif %}">
{{ form_label(form.field, null, { 'attr': {'class': '_hint'}, 'help': 'Help text or variable containing it' }) }}
{{ form_widget(form.field, { 'attr': {'class': 'grid_4'} }) }}
</div>