我想获取表单字段类型并为字段类型设置类
我试试:
{# Form field row #}
{% block form_row %}
{% spaceless %}
<div class="field-group{% if errors|length > 0%} error{%endif%}" id="fc-{{ id }}">
{{ form_label(form, label|default(null)) }}
<div class="field-item {{ type }}">
{{ form_widget(form) }}
{% if errors|length > 0 %}
<div class="errors">{{ form_errors(form) }}</div>
{% endif %}
</div>
</div>
{% endspaceless %}
{% endblock %}
但{{type}}无效。
答案 0 :(得分:23)
MatsRietdijk的答案是正确的,但是从Symfony 2.3开始,该类型的索引似乎从2变为1.因此,{{ form.vars.block_prefixes.1 }}
将返回checkbox
,{{1} },date
等
add a class to the form row时,您可以将其用于making application-wide customizations:
choice
然后你可以应用CSS规则:
{% block form_row %}
<div class="form_row {{ form.vars.block_prefixes.1 }}">
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock form_row %}
如果您使用Twitter引导程序,则自div.form_row.text {color:Red;}
类exists in bootstrap以来可能会遇到问题。我建议使用Symfony表格行的前缀:
.checkbox
CSS文件中的规则将有所不同:
{% block form_row %}
<div class="form_row symfony_{{ form.vars.block_prefixes.1 }}">
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock form_row %}
答案 1 :(得分:19)
您可以使用以下方法获取字段类型:
{{ form.FIELD_NAME.vars.block_prefixes.2 }}
因此,如果您在表单中有一个名为message的字段,请使用:
{{ form.message.vars.block_prefixes.2 }}
对于嵌套表单字段类型,请使用:
{{ form.NESTED_FORM_NAME.FIELD_NAME.vars.block_prefixes.2 }}
编辑:
要覆盖基本表单块,请在模板文件中执行此操作:
....
{% form_theme form _self %}
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
{% if not attr.class is defined %}
class="{{ type|default('text') }}"
{% endif %}
{% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% elseif attrname == 'class' %}{{ attrname }}="{{ type|default('text') }} {{ attrvalue }}"{% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
{% block content %}
....
{% endblock %}
要获得beter类型:
....
{% form_theme form _self %}
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
{% if not attr.class is defined %}
class="{{ form.vars.block_prefixes.2 }}"
{% endif %}
{% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% elseif attrname == 'class' %}{{ attrname }}="{{ form.vars.block_prefixes.2 }} {{ attrvalue }}"{% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
{% block content %}
....
{% endblock %}
答案 2 :(得分:2)
public class ValidationResult
{
public bool IsValid { get; set; }
public IList<string> Errors { get; set; }
public ValidationResult()
{
Errors = new List<string>();
}
}
public class IsValidInput
{
public ValidationResult IsValid(object value)
{
ValidationResult result = new ValidationResult();
try
{
ExternalValidator.Validate(value);
result.IsValid = true;
}
catch (CustomException ex)
{
foreach(var errorText in ex.GetDescriptions())
{
result.Errors.Add(this.ErrorMessage + errorText);
}
}
}
return result;
}
用于生成块名称以显示字段(cf block_prefixes
方法)。将显示模板中最具体的现有块(通常为FormRenderer::searchAndRenderBlock
文件)。
因此,form_div_layout.html.twig
的最后一项是您输入的ID,以允许您覆盖特定字段的阻止。
上一个项目将是您需要的项目。
你可以在聪明的语法中使用这个:block_prefixes
。
答案 3 :(得分:1)
为了避免硬编码数组索引(1或2取决于Symfony版本),我使用了以下内容:
{{ form.vars.block_prefixes | slice(-2,1) | first }}
答案 4 :(得分:0)
使用
{{ form.name.vars.original_type }}
E.g。来自我的一个模板
{% if myform.fieldname.vars.original_type == 'choice' %}
<hr>
{{ form_label(myform.fieldname) }}
<p>Select a ...</p>
{{ form_widget(myform.fieldname) }}
{% elseif myform.fieldname.vars.original_type == 'hidden' %}
{{ form_row(myform.fieldname) }}
{% endif %}