создание нескольких элементов с одинаковым набором опций в Zend Framework. - PullRequest
1 голос
/ 19 марта 2012

Привет, я должен создать несколько элементов множественного выбора в Zend с такими же параметрами.т.е.

$B1 = new Zend_Form_Element_Multiselect('Rating');
$B1->setLabel('B1Rating')
          ->setMultiOptions(
              array(
                  'NULL' => "Select", 
                  '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'))
          ->setRequired(TRUE)
          ->addValidator('NotEmpty', true);
    $B1->setValue(array('NULL'));
    $B1->size = 5;    
    $this->addElement($B1);

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

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Другой подход:

$options = array(
    'required'     => true,
    'validators'   => array('NotEmpty'),
    'value'        => null,
    'size'         => 5,
    'multiOptions' => array(
              'NULL' => "Select", 
              '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'),
);

$B1 = new Zend_Form_Element_Multiselect('Rating', $options);
$B1->setLabel('B1Rating')
$this->addElement($B1);

$B2 = new Zend_Form_Element_Multiselect('Rating2', $options);
$B2->setLabel('B2Rating')
$this->addElement($B1);

И так далее ...

2 голосов
/ 20 марта 2012

Поскольку никогда не существует ограничений на количество способов достижения определенной цели, вот другое решение:

$ratingLabels = array('Rating 1', 'Rating 2', 'Rating 3');

foreach($ratingLabels as $index => $ratingLabel) {
    $this->addElement('multiselect', 'rating' . (++$index), array(
        'required' => true,
        'label' => $ratingLabel,
        'value' => 'NULL',
        'size' => 5,
        'multiOptions' => array(
            'NULL' => 'Select',
            '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'
        ),
    ));
}
2 голосов
/ 19 марта 2012

О трех разных способах приходят на ум. Вот самый простой

$B2 = clone $B1;
$B2->setLabel('B2Rating');
...