2

カスタムsfFormのラベルにいくつかのcss属性を追加しようとしましたが、それを実現できません。

カスタムクラスmyForm extends sfFormでは、すべてのテキストフィールドを動的に作成します。

public function configure()
{
    $widgetFixtures = array();
    foreach ($fixtures as $fixture) {  
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
            array('label' => $fixture->getTeamNameDom()),  
            // I would like to add something like: array('class' => $fixture->getCSS()),
            array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
            );
    }
    $this->setWidgets($widgetFixtures);
}

レンダリングをフォーマットしようとしましたsetFormFormatterNameが、成功しませんでした。

注:renderLabel($value, $attributes = array())DBからCSSクラスを取得しているため、テンプレートで使用できません(ご覧のとおり、$ fixture-> getCSS()を使用する必要があります)。

誰かが私の光を当てることができますか?

どうもありがとう。

4

5 に答える 5

1

これが私がそれを解決した方法です。
私はjohnwardsとrichsageの両方からの提案を受け取り、それらをまとめました。
「この種のものは、ビュー/アクションで処理する必要があります。」
「ウィジェット自体に渡されたオプション/属性へのアクセス。」

まず、CSSクラスを入力自体に追加します(使用しない場合でも)。

私のカスタムクラスmyForm extends sfFormでは、

foreach ($fixtures as $fixture) {    
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
         array('label' => $fixture->getTeamNameDom()),  
         array('value' => $fixture->getScore1(), 
               'readonly' => 'readonly',  
               'class' => $fixture->getCSS())  
         );  
}  

次に、テンプレートで、を使用する代わりに、echo $form;以下に示すようにCSSクラスをラベルに追加します。

foreach ($form as $widgetId => $widget) {  
    ...
    $labelClass = $widget->getWidget()->getAttribute('class');  
    echo '<td>'.$widget->renderLabel(null, array('class' => $labelClass)).'</td>';  
    ...
}

多分それはこの問題を解決するための最良の方法ではありませんが、それは機能します。

フィードバックありがとうございます!

于 2010-06-28T19:42:50.340 に答える
0

あなたがやろうとしていることは可能のようですが、グレー表示された構文は少しずれているようです。これを試して:

    $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
        array('label' => $fixture->getTeamNameDom()),  
        array('class' => $fixture->getCSS()),
        array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
    );

...またはここの「sfWidgetForm基本クラス」セクションを確認してください:http ://www.symfony-project.org/forms/1_4/en/A-Widgets

于 2010-06-28T00:11:34.887 に答える
0

class属性は、すべてのフォームウィジェットの2番目のパラメーターの配列として渡す必要があります。

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));
于 2010-06-28T07:56:27.317 に答える
0

CSSをラベルに追加する場合は、ウィジェットクラス、特にラベルをレンダリングするメソッドをオーバーライドしてみてください。その後、次のようなことを行うことができます

$foo = new myWidgetFormInputText(array("myCSSClass" => $fixture->getCSS()));

renderLabel()次に、ウィジェットでメソッドなどをオーバーライドします。ウィジェットは、渡したオプションにアクセスできます。上記の例myCSSClassでは、オプションキーです。次に、このクラス値をウィジェットのラベルに適用できます。

于 2010-06-28T08:36:32.307 に答える
0

それよりずっと簡単です。タグのラベルにCSSを適用するだけです...

label[for=payment_cardNumber]
{
    margin-top: 20px;
    color: red;
}
于 2012-08-26T17:24:27.630 に答える