2010-06-27 3 views
2

사용자 정의 sfForm의 레이블에 CSS 속성을 추가하려고 시도했지만 얻을 수 없습니다. 내 사용자 정의 클래스 myForm extends sfForm에서CSS 속성을 Symfony 양식 라벨에 추가 하시겠습니까?

는 동적으로 모든 텍스트 필드를 만듭니다

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으로 만 성공하지 렌더링 형식을 시도했다.

참고 : DB에서 CSS 클래스를 얻을 수 있으므로 템플릿에 renderLabel($value, $attributes = array())을 사용할 수 없습니다 (본인이 보았 듯이 $ fixture-> getCSS()).

누군가 내 조명을 흘릴 수 있습니까?

감사합니다.

답변

1

어떻게 해결 했는가?
johnwards와 richsage의 제안을 모두 인용하여 함께 정리했습니다.
"이러한 종류의 것들은보기/작업에서 처리해야합니다."
"위젯 자체에 전달 된 옵션/속성에 대한 액세스."

먼저 CSS 클래스를 입력에 추가합니다 (사용하지 않더라도).

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

을 어쩌면 그것이 : 아래 그림과 같이 내 사용자 정의 클래스 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 클래스를 추가 이 문제를 해결하는 가장 좋은 방법은 아니지만 작동합니다.

귀하의 의견에 감사드립니다.

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

+0

sfWidgetFormInputText는 $ options = array() 및 $ attributes = array()의 두 매개 변수 만 허용합니다. symfony 웹 사이트를 이미 보았고 CSS 속성을 레이블에 넣는 것과 관련된 정보를 찾을 수 없습니다 ... "setLabel ($ name, $ value)"와 같은 기능을 사용하여 문제를 해결하지 못함 – ocornu

0

클래스의 속성은 모든 형태의 위젯에 대한 두 번째 매개 변수에 배열로 전달 될 필요가있다.

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

내가 틀렸다면 말해 줘요 하지만이 구문은 CSS 클래스를 입력 텍스트에 추가 할 것이라고 생각합니다. 내 문제는 레이블에 CSS 클래스를 할당하는 것입니다. – ocornu

+0

아, 죄송 합니다만, 이른 아침 실수. 양식을 사용자 정의 할 때 쉽게 수행 할 수 없습니다. 폼 프레임 워크에서 너무 복잡해지기 시작했습니다. 이런 종류의 것들은보기/행동에서 다루어 져야합니다. – johnwards

0

레이블을 CSS에 추가하려는 경우 위젯 클래스를 재정의 할 수 있습니다. 특히 레이블을 렌더링하는 메소드. 그런 다음

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

같은 것을 할 다음 renderLabel() 방법 또는 위젯의 유사를 오버라이드 (override) 할 수있다. 위젯에서 전달하는 옵션에 액세스 할 수 있습니다. 위의 예에서는 myCSSClass이 옵션 키입니다. 그런 다음이 클래스 값을 위젯의 레이블에 적용 할 수 있습니다.

+0

위젯에는 양식 필드에있는 renderLabel 메소드가 없습니다. http://www.symfony-project.org/api/1_2/sfFormField 액션/뷰에서보다 간단하게 작업 할 수있는 정말 멋진 물건이 많이 있습니다. – johnwards

0

훨씬 쉽습니다. 태그를위한 레이블에 CSS 만 적용하면 ...

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