0

我在将基于梨的表单转换为 zend 表单时遇到了一些问题。

我需要的元素很少:

  • 基本要素
  • 团体
  • 组元素
  • 部分
  • 我以前使用模板在 Pear 上呈现表单。我显然不能使用预先存在的 zend 装饰器,因为我需要为我的基本元素的每个组件指定 css 类。要查看我需要呈现的问题,这是基本元素的模板:

    <li class = "{position_in_the_form} {error}">
      <label class="{label_class}"> {label} 
        [<span class="required_class"> * </span>]
      </label>
      <div> {element_content} </div>
      [<p class = "{error_class}"> {error_message} </p>]
    </li>
    

    如您所见,我希望能够指定许多动态的东西:表单中的位置、标签的类、所需部分的类、错误的类。我还希望能够从 ini 文件中指定它。我设法从 ini 但不是自定义字段设置基本元。

    我不能使用基本装饰器的原因之一是,当元素或 sub_form 中存在错误时,我需要在“li”类中有“错误”。我不确定错误装饰器是否有可能。 。 (如我错了请纠正我)

    此外,对于该组,我需要处理错误的东西,并且由于核心组不处理错误,我需要将 sub_form 子类化。但是如何在ini文件中创建子表单,我不知道如何从ini中为子表单提供参数。

    这里的主要思想是能够在表单中包含元素的视觉和逻辑组。例如,我需要一个带有全名、中间名等的“名称”组。这也意味着该“名称”组的全局验证器。另一件事是我希望能够定位这些组:左半边,右半边,全我为此准备好 css 并与 pear 一起工作。

    所以我需要的是一个简单的解决方案,只需很少的代码和 ini 配置。不幸的是,我认为我陷入了太复杂的事情中,所以如果有人对简单的架构有任何想法,那就太棒了!

    提前感谢您的帮助,最好的,鲍里斯

    4

    1 回答 1

    0

    在您复杂的装饰需求中,您可能想要使用ViewScript Zend_Form_Element_Decorator

    $element->setDecorators(array(
            array('ViewScript', array('viewScript' => 'path/to/your/views/element.phtml')),
    ));
    

    然后在path/to/your/views/element.phtml,或多或少像

    <li class="<?php echo $this->element->getAttrib('position_in_the_form') ?> <?php echo $this->element->hasErrors() ? 'error' : '' ?>">
      <label class="<?php echo $this->element->getAttrib('label_class') ?>"> 
            <?php echo $this->formLabel($this->element->getName(),
                           $this->element->getLabel()) ?>
        <? if ( $this->element->isRequired() ) { ?>
            [<span class="required_class"> * </span>]
        <? } ?>
      </label>
      <div> <?php echo $this->{$this->element->helper}(
          $this->element->getName(),
          $this->element->getValue(),
          $this->element->getAttribs()
      ) ?> </div>
        <? if ( $this->element->hasErrors() ) { ?>
            [<p class="<?php echo $this->element->getAttrib('error_class') ?>"> <?php echo $this->formErrors($this->element->getMessages()) ?> </p>]
        <? } ?>
    </li>
    

    只是一段草草的代码,但应该会引导您朝着目标方向前进。

    问候

    于 2010-10-04T12:11:28.613 回答