当我创建表单时:
$builder = $this->createFormBuilder();
$form = $builder->add( 'add', 'button')->getForm();
并渲染它:
<div><button type="button" id="form_add" name="form[add]">Add</button></div>
创建属性类型,ID和名称。
我想删除这些属性,但我不知道该怎么做。我试过这样做:
$builder = $this->createFormBuilder();
$form = $builder->add( 'add', 'button', array( 'attr' => array() ) )->getForm();
没有任何成功。
我怎么能这样做?
问候和感谢
答案 0 :(得分:0)
我搞砸了一段时间,而我最接近的就是用空属性渲染它们。但是,这是因为我测试的项目是 Symfony 2.0 ,在该版本中,由于Symfony\Component\Form\FormView::$vars
为private
,因此无法完全删除属性。
但是,在 Symfony 2.1 及更高版本中,同一属性为public
,因此您应该能够直接修改(或删除)属性/变量,而不受{{{{1}的约束。 1}} api。
首先,创建自己的类型来表示这个“裸体按钮”
<强>的src /你/捆绑/窗体/ NakedButtonType.php 强>
FormView
现在,告诉服务容器如何构建类型
应用/配置/ config.yml 强>
<?php
namespace Your\Bundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
class NakedButtonType extends AbstractType
{
/**
* (non-PHPdoc)
* @see Symfony\Component\Form.FormTypeInterface::getName()
*/
public function getName()
{
return "naked_button";
}
/**
* (non-PHPdoc)
* @see Symfony\Component\Form.AbstractType::getParent()
*/
public function getParent(array $options)
{
return 'button';
}
/**
* (non-PHPdoc)
* @see Symfony\Component\Form.AbstractType::buildViewBottomUp()
*/
public function buildViewBottomUp(FormView $view, FormInterface $form)
{
// Symfony 2.0
// This will still render the attributes, but they will have no value
$view->set('id', null);
$view->setAttribute('type', null);
// Symfomy >= 2.1
// This *should* remove them completely
unset( $view->vars['id'] );
unset( $view->vars['attr']['type'] );
}
}
然后更新您的父表单以使用您的新类型而不是ootb“按钮”类型。
services:
form.type.naked_button:
class: Your\Bundle\Form\NakedButtonType
tags:
- {name: form.type, alias: naked_button}
所有这一切......
如果您希望这些按钮没有任何属性,为什么不直接将它们直接放入您的视图中?
$builder = $this->createFormBuilder();
$form = $builder->add( 'add', 'naked_button')->getForm();
所有这些自定义类型的废话似乎都有很多开销来呈现你显然不需要Symfony为你管理的东西。
答案 1 :(得分:0)
虽然不是一个好主意,但我会帮助你加载枪并射击自己的脚: - )
创建一个新的Resources / views / Form / fields.html.twig文件,并在其中加入以下内容:
{% 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 %}
{% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
如果你真的想要删除那里的所有属性,你可以删除{%for attrname ...%}行。这将从所有表单字段中删除属性。如果添加一些逻辑,则可以将其应用于特定字段。
下一步,您需要注册字段助手。在app / config / config.yml文件中,添加以下行:
twig:
form:
resources:
- 'SomeBundle:Form:fields.html.twig'