0

フォームを作成したら:

    $builder = $this->createFormBuilder();
    $form = $builder->add( 'add', 'button')->getForm();

そしてそれをレンダリングします:

    <div><button type="button" id="form_add" name="form[add]">Add</button></div>

属性 type、id、および name が作成されます。

この属性を消したいのですが、やり方がわかりません。私はやろうとしました:

    $builder = $this->createFormBuilder();
    $form = $builder->add( 'add', 'button', array( 'attr' => array() ) )->getForm();

成功せずに。

どうすればできますか?

ご挨拶と感謝

4

2 に答える 2

0

しばらくこれをいじりましたが、最も近いのは、空の属性でレンダリングすることでした。ただし、これは、私がテストしたプロジェクトが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 で管理する必要がないものをレンダリングするための大量のオーバーヘッドのように思えます。

于 2013-10-28T22:37:45.580 に答える