【问题标题】:porting template to zend framework将模板移植到 zend 框架
【发布时间】:2009-10-16 12:41:22
【问题描述】:

我在将基于梨的表单转换为 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 配置。不幸的是,我认为我陷入了太复杂的事情中,所以如果有人对简单的架构有任何想法,那就太棒了!

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

    【问题讨论】:

      标签: zend-framework templates zend-decorators


      【解决方案1】:

      在您复杂的装饰需求中,您可能希望使用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>
      

      只是一个草草的sn-p代码,但应该会引导你朝着你的目标前进。

      问候

      【讨论】:

        猜你喜欢
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-19
        • 2021-02-09
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多