6

symfony2 の Field コンポーネントで少し不快な問題がありました。たとえば、twig テンプレートでフォーム フィールドの配列を出力したいと思います。

{% for field in form %}
    {{ form_label( field ) }}: {{ form_field( field ) }}
{% endfor %}

テキストフィールドの構成は次のとおりです。

$field = new TextField( 'FieldName', array(
    'label' => 'MyCustomLabel',
) );

しかし残念ながら、エンジンがこの出力をレンダリングすると、「MyCustomLabel」ではなく「FieldName」がラベルとして取得されます。for 以外のフォーム フィールドを出力しても問題はありません (その場合、各フィールドのテンプレートにラベルを追加するだけです)。しかし、スクリプトは実行前にフォーム フィールドの特定の数量と構成を知りません。そのため、フィールド レンダリングのサイクル メソッドを実装する必要があります。また、小枝表記にとどまりたいです...良いアドバイスをいただければ幸いです:)

4

6 に答える 6

8

ラベルを変更する場合は、次の手順に従います。1) フォーム クラスを作成します。2)add('fieldName',null,array('label' => 'My New Label:'))

fieldName は変更しないでください。ただし、配列内で Label を操作できます。

楽しみ!

于 2011-09-05T15:29:20.937 に答える
3

答えを期待してこれに出くわした Symfony 2.1 ユーザーへの答えです。@rikinadhyapak の答えはほとんどありません。

buildForm メソッドで、FOSUserBundle などのバンドルの FormType クラスを拡張した場合:

    $field = $builder->get('username');         // get the field
    $options = $field->getOptions();            // get the options
    $type = $field->getType()->getName();       // get the name of the type
    $options['label'] = "Login Name";           // change the label
    $builder->add('username', $type, $options); // replace the field
于 2013-02-05T02:43:30.833 に答える
1

正直なところ、Symfony Form コンポーネントの学習を数週間延期するつもりです。symfony の開発者は、フォーム API の大幅なオーバーホールを行っています。私の理解では、ほとんどの作業が完了しており、メイン リポジトリにプル リクエストが送信されています

于 2011-04-15T04:39:39.820 に答える
1

Symfony 2.3 では、次のようにイベントを使用してラベルを置き換えることができます。

$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event)
{
    $form = $event->getForm();
    $object = $event->getData();

    $field = $form->get('fieldname');
    $config = $field->getConfig();
    $options = $config->getOptions();
    $options['label'] = 'New label'; // change the label
    $form->add($field->getName(), $config->getType()->getName(), $options); // replace the field

});

しかし、私はこれを避けます。

于 2016-04-10T22:58:52.973 に答える
0

Symfony2 beta2 に追加されましたhttp://groups.google.com/group/symfony-users/browse_frm/thread/c66165093665809

于 2011-05-05T08:53:26.230 に答える