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())在模板中使用,因为我从数据库中获取了 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

如果您想将 CSS 添加到标签 - 特别是呈现标签的方法,您可以尝试覆盖小部件类。然后你可以做类似的事情

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

然后renderLabel()在小部件中覆盖您的方法或类似方法。您的小部件将有权访问您传入的选项 - 在上面的示例myCSSClass中是选项键。然后,您可以将此类值应用于小部件的标签。

于 2010-06-28T08:36:32.307 回答
0

class 属性需要作为所有表单小部件的第二个参数中的数组传入。

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));
于 2010-06-28T07:56:27.317 回答
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

这比这容易得多。只需将 CSS 应用于标签的标签...

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