しばらくこれをいじりましたが、最も近いのは、空の属性でレンダリングすることでした。ただし、これは、私がテストしたプロジェクトがSymfony 2.0であり、そのバージョンでは属性を完全に削除できないためSymfony\Component\Form\FormView::$vars
ですprivate
。
ただし、Symfony 2.1以降では、同じプロパティであるため、 APIpublic
に制約されることなく、属性/変数を直接変更 (または削除) できるはずです。FormView
まず、この「裸のボタン」を表す独自のタイプを作成します。
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 で管理する必要がないものをレンダリングするための大量のオーバーヘッドのように思えます。