7

method=GETとクリーンURLスペースでSymfony2.1フォームを使用するためのヘルプが必要です。

リンクをブックマークできるように、URLに設定したい「フィルター」を作成しています。

したがって、非常に単純なコード:

$form = $this->createFormBuilder($defaultData)
    ->add('from', 'date', array('required' => false, 'widget' => 'single_text', 'format' => 'dd.MM.yyyy'))

フォームウィジェットをレンダリングしましたが、すべて問題ありません。

ただし、フォームを送信すると、非常に醜いGETパラメーターが生成されます。

/app_dev.php/de/event?form%5Bfrom%5D=17.11.2012

これは、入力名がもちろんform[from]

そこで、URLスペースをクリーンアップするために、私は自分自身をテーマにしました。

{% block widget_attributes %}
{% spaceless %}
    id="{{ id }}" name="{{ id }}"{% if read_only %} 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 %}{{attrname}}="{{attrvalue}}" {% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}

ここで私はに置き換えname="{{ full_name }}"ましたname="{{ id }}"

これはうまく機能します-私のURLスペースはよりクリーンです:

/app_dev.php/de/event?form_from=17.11.2012

私はそれと一緒に暮らすことができたと思います-理想的from=xxxにはより良いでしょうが。それが最初の、そしてもっと小さな問題です。


2番目の問題は、フォームをバインドできなくなったことです。これは、パラメーター「form」が設定されていないため明らかです。「form_from」が代わりに使用されますが、バインドを実行すると、form[]が必要になります。 。

私はこれを次のように修正しようとしました:

$fromDate = $this->get('request')->query->get('form_from', null);
$request->query->set('form', array('from' => $fromDate);

しかし、それはうまくいきません。また、私は現在、ハッキングの巨大な穴を掘っているのではないかと思います。

したがって、問題は次のとおりですform%5Bfrom%5D。URLをそのまま使用する必要がありますか、それとも(POSTを明らかに使用せずに)これらすべてを実行するためのより良い方法がありますか?

4

3 に答える 3

26

ルート フォームの名前を空に設定すると、フィールド名はform. 経由で行う

// the first argument to createNamedBuilder() is the name
$form = $this->get('form.factory')->createNamedBuilder(null, 'form', $defaultData)
    ->add('from', 'date', array(
        'required' => false,
        'widget' => 'single_text',
        'format' => 'dd.MM.yyyy'
    ));
于 2012-11-20T13:41:29.967 に答える
7

getName古いスレッドですが、symfony 3 が完全に無視することに言及する価値があります。

ただし、getBlockPrefixフォーム名を空白にする必要がある場合は、同じことができます。

public function getBlockPrefix() {
    return null;
}

これにより、フォーム フィールドにプレフィックスなしの名前が付けられます。

于 2016-10-15T13:17:03.967 に答える
2

return null;の実装で使用するAbstractType::getNameと、最近は同じ効果があるようです。

于 2013-08-23T15:46:47.943 に答える