我搞砸了一段时间,我能得到的最接近的方法是让它们渲染为空属性。但是,那是因为我测试的项目是Symfony 2.0,并且在那个版本中,不可能完全删除属性,因为Symfony\Component\Form\FormView::$vars
is private
。
但是,在Symfony 2.1和更高版本中,相同的属性是这样的public
,因此您应该能够直接修改(或删除)属性/变量,而不受FormView
api 的限制。
首先,创建自己的类型来表示这个“裸按钮”
src/Your/Bundle/Form/NakedButtonType.php
<?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'] );
}
}
现在,告诉服务容器如何构建你的类型
应用程序/配置/config.yml
services:
form.type.naked_button:
class: Your\Bundle\Form\NakedButtonType
tags:
- {name: form.type, alias: naked_button}
然后更新您的父表单以使用您的新类型而不是 ootb“按钮”类型。
$builder = $this->createFormBuilder();
$form = $builder->add( 'add', 'naked_button')->getForm();
说了这么多...
如果你想要这些按钮没有任何属性,为什么不直接把它们放在你的视图中呢?
<form>
{{ form_errors(form) }}
{{ form_rest(form) }}
<div>
<button>Add</button>
</div>
</form>
所有这些自定义类型的废话似乎都需要大量开销来渲染您显然不需要 Symfony 为您管理的东西。