Добавить атрибуты CSS в ярлыки форм Symfony? - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь добавить некоторые атрибуты css к меткам в моей пользовательской sfForm, но не могу этого достичь.

В моем пользовательском классе 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 ()).

Может ли кто-нибудь пролить мой свет?

Большое спасибо.

Ответы [ 5 ]

1 голос
/ 28 июня 2010

Вот как я это решил.
Я взял оба предложения от 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>';  
    ...
}

Возможно, это не лучший способ решить эту проблему, но он работает.

Спасибо всем за отзыв!

0 голосов
/ 26 августа 2012

Это намного проще, чем это.Просто примените CSS к метке для тега ...

label[for=payment_cardNumber]
{
    margin-top: 20px;
    color: red;
}
0 голосов
/ 28 июня 2010

Атрибут class должен быть передан как массив во втором параметре для всех виджетов формы.

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));
0 голосов
/ 28 июня 2010

Вы можете попробовать переопределить класс виджета, если хотите добавить CSS в метки - в частности, методы, которые визуализируют метку. Вы могли бы тогда сделать что-то вроде

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

, а затем переопределите ваш метод renderLabel() или аналогичный в вашем виджете. Ваш виджет будет иметь доступ к опциям, которые вы передаете - в приведенном выше примере myCSSClass - это ключ опции. Затем вы можете применить это значение класса к метке вашего виджета.

0 голосов
/ 28 июня 2010

То, что вы пытаетесь сделать, кажется возможным, но ваш сероватый синтаксис кажется немного неправильным. Попробуйте это:

    $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 / ru / A-Widgets

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...