将CSS属性添加到Symfony表单标签?

问题描述:

我尝试在我的自定义sfForm中为标签添加一些CSS属性,但我无法实现它。将CSS属性添加到Symfony表单标签?

在我的自定义类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())。

有人可以摆脱我的光?

非常感谢。

下面是我如何解决它。
我把johnwards和richsage的两条建议放在一起:
“这种东西应该在视图/动作中处理。”
“访问传递给Widget本身的选项/属性。”

首先,我将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>'; 
    ... 
} 

也许是不是解决这个问题的最好方法,但它有效。

谢谢大家的反馈!

你试图做的似乎是可能的,但你的灰色语法似乎有点关闭。试试这个:

$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

+0

sfWidgetFormInputText只接受2个参数$ options = array()和$ attributes = array()。 我已经看过symfony网站,并且找不到有关将css属性放入标签的任何信息... 像“setLabel($ name,$ value)”这样的函数不能解决问题 – ocornu 2010-06-28 06:32:21

class属性需要传递在为所有表单控件的第二个参数的数组。

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass')); 
+0

告诉我,如果我错了但我认为这个语法会将CSS类添加到输入文本中。我的问题是分配CSS类到它的标签。 – ocornu 2010-06-28 08:05:13

+0

对不起,早上我的错误。自定义表单时,您无法轻松完成此操作。对于表单框架,您开始变得过于复杂。这种东西应该在视图/动作中处理。 – johnwards 2010-06-28 08:36:33

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

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

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

+0

小工具没有renderLabel方法,它们位于表单域中。 http://www.symfony-project.org/api/1_2/sfFormField很多非常令人讨厌的东西让它起作用,在动作/视图中更简单 – johnwards 2010-06-28 18:47:40

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

label[for=payment_cardNumber] 
{ 
    margin-top: 20px; 
    color: red; 
}