Как да добавите атрибути към етикет, генериран със Zend/Form в Zend framework 2

Добавям формуляри към страницата си с помощта на Zend/Form.

Добавям елементи, като ги дефинирам по следния начин:

    $this->add(array(
            'name' => 'value',
            'attributes' => array(
                    'type'  => 'text',
                    'id' => 'value',
                    'autocomplete' => 'off',
                    'placeholder' => 'Cost',
            ),
            'options' => array(
                    'label' => 'Cost',
            ),
    ));

Както можете да видите, има възел 'label' => 'cost', това генерира етикет, който да върви с входния елемент.

Как да добавя класове, атрибути към този етикет?


person El Dorado    schedule 07.02.2013    source източник


Отговори (4)


Моля, опитайте това, не съм тествал или използвал това, но според източника трябва да функционира правилно:

$this->add(array(
    'name'       => 'value',
    'attributes' => array(),
    'options'    => array(
        'label_attributes' => array(
            'class'  => 'mycss classes'
        ),
        // more options
    ),        
));

Ако това не работи, моля, оставете ми коментар. Ако не функционира, не е възможно да се използва този подход, тъй като FormLabel ограничава доста validAttributes:

protected $validTagAttributes = array(
    'for'  => true,
    'form' => true,
);
person Sam    schedule 07.02.2013
comment
Здравей Сам, промених елемента, както следва: $this-›add(array( 'name' =› 'value', 'attributes' =› array( 'type' =› 'text', 'id' =› 'value', 'autocomplete' =› 'off', 'placeholder' =› 'Cost', ), 'options' =› array( 'label' =› 'Cost', ), 'label_attributes' =› array( ' клас' =› 'css', ) )); Въпреки това все още няма късмет. Въпреки това се изобразява като: ‹label for=value›Cost‹/label› Някаква идея за for ? - person El Dorado; 07.02.2013
comment
Ще трябва да проверя това по-късно, не мога да обещая нищо, въпреки че рамката посочва, че това ще работи: $element->setLabelAttributes(array('class' => 'control-label')); Може би опитайте да добавите label_attributes като под- на options - вижте редактираната версия - person Sam; 07.02.2013
comment
Под опции! =) Така че оставете редактираната версия, за да я види светът! ;-) - person El Dorado; 07.02.2013
comment
Правете това в изгледа, винаги. Вашият поглед не трябва да прониква в класовете ви. - person emix; 08.04.2016
comment
@mike Въпреки че като цяло съм съгласен, Формулярите - като цяло - са екстремен случай на уеб разработка. Форми SUCK. НЕ МОЖЕТЕ ДА ПРАВИТЕ ФОРМУЛЯРИ ПРАВИЛНО. Формите винаги ще бъдат бъркотия. Присвояването на CSS-класа по подразбиране във Form-Object, който трябва да бъде изобразен автоматично, е напълно добре. - person Sam; 09.04.2016
comment
Не съм съгласен. Можете ли да посочите някои аргументи защо са гадни? Моите формуляри подлежат на тестване на модули и предоставят на моята система перфектен, напълно валидиран вход от потребителя. - person emix; 10.04.2016
comment
@mike Формите са гадни, защото - по своята същност - те са компонент, който е едновременно модел и слой на изглед. Те са преплетени, не могат да бъдат разединени. Разбира се, можете да имате страхотен Form Component, но това не означава, че те все още не са лоши ;) - person Sam; 10.04.2016
comment
Ами неговите хора, които свързват обекти във форми и смесват модели с изгледа. Самият компонент е удобен, когато се използва по правилния начин. - person emix; 10.04.2016
comment
@mike наистина. Когато говорим за компонент като Zend\Form, това най-често е това, което искате да направите. Бих казал, че по-опитните програмисти вече не се занимават с Forms. Те пишат InputFilters и Mapper / Hydrators, но оставят формуляра изцяло на момчетата от интерфейса - което според моя опит също е най-доброто нещо, което можете да направите. - person Sam; 10.04.2016

Това работи добре в Zend Framework 2.3:

$this->add(array(
  'name' => 'userName',
  'attributes' => array(
      'type'  => 'text',
      'class' => 'form-control',
      'placeholder' =>'Username',
  ),
  'options' => array(
      'label' => 'Username',
      'label_attributes' => array('class' => 'control-label')
  ),

));
person speedy32    schedule 03.10.2014

$element->setOptions(array('label_class' => array('class' => 'control-label')));

Произвежда код като този:

<label class="control-label">
  <input type="radio" name="option1" id="option1" value="1">
  Option 1
</label>
<label class="control-label">
  <input type="radio" name="option2" id="option2" value="2">
  Option 2
</label>

Опитвал съм това. Работи в Zend Framework One.

Забележете, ако използвате

$element->setOptions(array('label_attributes' => array('class' => 'control-label')));

получавате нежелания ефект по някаква причина

<label attributes="control-label">
  <input type="radio" name="option1" id="option1" value="1">
  Option 1
</label>
person Damon Hogan    schedule 30.04.2014
comment
I have tried this. It works in Zend Framework One. Това е страхотно, но това е въпрос на ZF2, там не работи. - person Crisp; 02.05.2014

За програмен подход на ZF2+ опитайте това:

$element->setOptions(array(
    'label_attributes' => array(
        'style' => 'color:gray;'
    )
));

Вдъхновен от отговора на Деймън.

person Dennis    schedule 24.10.2017