Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

среда, 13 октября 2010 г.

Zend Framework. Массив элементов формы.

Возникла задача создать массив элементов формы с именем вида myName[].

Вот такое:
<input type='hidden' name='items[]' value='1' />
<input type='hidden' name='items[]' value='2' />
<input type='hidden' name='items[]' value='3' />
На StackOverflow описывалось решение и оно на первый взгляд неплохое.
// Вариант 1
$form = new Zend_Form();
$subForm = Zend_Form_SubForm();
$subForm->addElement('Text', '1')
  ->addElement('Text', '2');
$form->addSubForm($subForm, 'element');

// Вариант 2
$form = new Zend_Form();
$form->addElement('Text', '1', array('belongsTo' => 'element'))
  ->addElement('Text', '2', array('belongsTo' => 'element'));
Все хорошо, но класс элемента формы Zend Framework требует уникальное имя.
Решение на скорую руку:
// Custom/Form/Element/HiddenArray.php
class Custom_Form_Element_HiddenArray extends Zend_Form_Element
{
  public $helper = 'HiddenArray';
}

// Custom/View/Helper/HiddenArray.php
class Custom_View_Helper_HiddenArray extends Zend_View_Helper_FormElement
{
  public function HiddenArray($name, $value = array(), $attribs = null)
  {
    $value = (array) $value;
    $html = '';
    foreach($value as $val) {
      $html .= "<input type='hidden' name='{$name}[]' value='{$val}' />\n";
    }
    return $html;
  }
}

// ...
$elem = new Custom_Form_Element_HiddenArray('items');
$elem->setValue(array(1, 2, 3));
$form->addElement($elem);

Комментариев нет:

Отправить комментарий