Intereting Posts
Как эхо-массив в PHP? как использовать переменную php в html? получить доступ к приложению laravel из приложения Android с помощью токена csrf Сохранение, организация и запрос продуктов, опций / тегов и категорий templating in php с использованием tpl-файлов Озадаченный вложением инъекций в PHP (цепочки классов) Как отправить динамическое содержимое электронной почты без задания cron Можно ли перетасовать семена? Библиотека PHP OpenID, которая позволяет facebook / openid / twitter и т. Д .; Есть ли способ в PHP использовать постоянные данные, как в Java EE? (обмен объектами между потоками PHP) без сеанса и кэша / DB В чем разница между {{}} и {!! !!} в файлах laravel blade? Как передать массив параметров PDO, но все же указать их типы? Как создать кумулятивное нормальное распределение в PHP Сохранение сеанса с помощью Curl и PHP Сеансы PHP не продлевают срок действия Cookie на каждом запросе

Есть ли способ префикс имени элемента Zend_Form?

У меня есть страница, на которой есть несколько форм. Некоторые формы имеют элемент с тем же именем, что и CustomerID. Это означает, что идентификатор ID элемента ID будет сталкиваться с тем же идентификатором в других формах. Я хотел бы найти чистый способ префикс имени поля с именем формы. Например, PaymentProfile_CustomerID. Предложения?

Пока, лучшее, что я смог придумать, это:

class MyForm extends Zend_Form { public function init() { $this->setName("PaymentProfile"); ... $this->_prefixElementNames(); } private function _prefixElementNames() { $elements = $this->getElements(); $formName = $this->getName(); foreach($elements as $e) { $e->setAttrib('id', $formName . '_' . $e->getName()); } } } 

Ответ UPDATE @ garvey ниже хорошо зарекомендовал себя с простой модификацией.

 public function addElement($element, $name = null, $options = null) { $e = parent::addElement($element, $name, $options); if($this->getName()) // I use setAttrib instead of setName because I only want the ID to be changed. // Didn't want the form data to be prefixed, just the unique HTML identifier. $element->setAttrib('id', $this->getName() . '_' . $element->getName()); return $e; } 

Я думаю, что проще просто использовать elementsBelongTo :

 public function init() { $this->setOptions(array( 'elementsBelongTo' => 'form_name' )); } 

изменить : расширен для будущего использования

Использование elementsBelongTo обертывает все элементы формы в массиве, поэтому вы получите

 Zend_Debug::dump($this->_getAllParams()) 

выходы:

 ["form_name"] => array( ["element1"] => "value1" ["element2"] => "value2" ) 

Я исследовал вашу проблему. И я думаю, что лучший способ – расширить класс Zend_Form следующим образом:

 class Cubique_Form extends Zend_Form { public function addElement($el) { $el->setName($this->getName() . '_' . $el->getName()); parent::addElement($el); } } 

И создание формы:

 $form = new Cubique_Form(); $form->setName('form'); $el = new Zend_Form_Element_Text('element'); $form->addElement($el);