2016-09-12 5 views
2

これは主に好奇心のためですが、私はこれをやりたいです。symfonyのマージキー=>値へ

私は、基本的にsymfonyのFormBuilderを使用してautofocusをフォームに入力したいという状況があります。しかし、その結果として、これは結果の形式でautofocus="1"を生成終わるこの

->add('textField', null, 
      array('attr' => array('class' => 'text-field-ex', 'autofocus' => true))) 

のようなものを使用してこれを入力することが可能です。これはChromeで問題なく動作しますが、Firefoxではこの形式が嫌いです。 autofocusが属性としてではなく単独で存在することを好みます。したがって、動作しません。これは、生のPHPコードでは簡単ですが、何らかの理由でSymfonyはこれをしたくありません。

これは、hereに対処されており、コメントで示唆されているように、これはJavascriptで比較的簡単に処理できます。これは、固有の不安定さによる不完全な解決策のようです。私はそれをこのように動作させていますが、コード自体を正しくレンダリングするのは初めてです。

私はこのような何か試してみました:

$autofocus = 'autofocus'; 
->add('textField', null, 
      array('attr' => array('class' => 'text-field-ex', $autofocus))) 

をしかし、これは単に"0"=autofocusする結果フォームフィールドをオンにし、まだ動作しません。

Symfonyでこれを直接処理する方法はありますか?

+0

あなたはautofocus = "autofocus" – ArtisticPhoenix

+0

yesを試してみましたか?同じ問題。 。 – nomistic

+0

基本的なシンフォニーコードを変更したい場合を除き、これは尋ねられ、答えられているようで、あなたはその答えに満足していません。 –

答えて

1

あなたは自分のテンプレートでblock_widgetを上書き(http://symfony.com/doc/current/form/form_customization.htmlを参照)、それは、これらの線に沿って何かで属性を出力する方法を置き換えることができます:

{% for attrname, attrvalue in attr %} 
    {% if attrname == 'autofocus' %} 
    autofocus 
    {% else %} 
    {{ attrname }}="{{ attrvalue }}" 
    {% endif %} 
{% endfor %} 

それは私が推測するjavascriptのソリューションよりもきれいです。

+0

これは良いアプローチでしたが、残念ながらうまくいきませんでした。 'autofocus =" "'を返しました。私は 'replace'を使用しようとしましたが、キーや値のどちらかでしか動作しないようです。私が知る限り、私はオペレータを変更する方法を見つけることができません。 – nomistic

+0

あなたは直接Twigを介してHTMLを出力しているので、うまくいきました。(うまくいきました。うまくいきました) - オーバーライドが考慮されていないか、コード内で何か他のことをしています... – tchap

+0

小枝の仕組みを理解する。 Firefoxで試してみてください。 Chromeではうまく動作しますが、Firefoxはオートフォーカスが必要です。 – nomistic

関連する問題