0
모든 필드를 렌더링 :Zend_Form이 같은 일부 사용자 지정 장식과 함께, 내가 Zend_Form 양식이 텍스트
$decorators = array();
$decorators[] = new Zend_Form_Decorator_ViewHelper(array());
$decorators[] = new Zend_Form_Decorator_Errors;
$decorators[] = new Zend_Form_Decorator_HtmlTag(array('tag' => 'div', 'class' => 'form-item'));
$decorators[] = new Zend_Form_Decorator_Label(array('class' => 'form-label'));
$decorators[] = new Zend_Form_Decorator_Callback(array(
'callback' => function($content, $element, $options) {
return sprintf('<div class="form-row">%s</div>', $content);
},
'placement' => false
));
$this->setElementDecorators($decorators);
문제는, 모든 필드가 텍스트 입력으로 렌더링됩니다. 왜 그렇게됩니까?
편집 : 모든 입력을 반드시 텍스트 입력으로 렌더링하지는 않지만 형식의 첫 번째 입력 유형으로 렌더링한다는 것을 발견했습니다. 다음은 내가 사용하는 양식의 예입니다 (데코레이터는 int 부모의 init로 설정됩니다).
<?php
class Form_Users_Add extends Form_Base {
protected $pbxs = array(1 => 'Element 1', 2 => 'Element 2');
public function init() {
$monitors = new Zend_Form_Element_Checkbox('prefered_screen_count');
$monitors->setCheckedValue(2);
$monitors->setUncheckedValue(1);
$monitors->setLabel('two_monitors');
$this->addElement($monitors);
$pbx = new Zend_Form_Element_Select('asterisk_id');
$pbx->setMultiOptions($this->pbxs);
$pbx->setLabel('users_asterisk_id');
$this->addElement($pbx);
parent::init();
}
}
양식 코드를 표시 할 수 있습니까? 그리고 부차적 인 질문 : 행에'Callback' 데코레이터를 사용해야하는 이유는 무엇입니까? 아이템 자체에 대해하는 것처럼'HtmlTag'을 사용하지 않으시겠습니까? 그냥 궁금해서. –
질문을 편집했습니다. 그리고 두 개의 HtmlTag가 작동하지 않을 수 있기 때문에 Callback을 사용하고 있습니다. 아마도 내가 잘못된 것을하고있을 것입니다.하지만 그들은 대체되었습니다. – Agares
아아아, 하나의 요소에 동일한 데코레이터 클래스의 여러 인스턴스를 사용하는 트릭이 있습니다. 데코레이터 이름의 별명을 지정해야합니다. 예 : array (array ('my-item'=> 'HtmlTag'), array ('tag'=> 'div', 'class'=> 'some-class')),'. 그런 다음 행에 대한'HtmlTag' 데코레이터에서 다른 별칭 인'my-row'를 사용하십시오. –