将模板移植到zend框架

时间:2009-10-16 12:41:22

标签: zend-framework templates zend-decorators

我几乎没有什么问题可以证明一个基于梨形式的形式。

我需要的元素很少:

  • 基本元素
  • 组元素
  • 我以前使用模板在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配置。不幸的是,我觉得我陷入了太复杂的困境,所以如果有人对简单的架构有任何想法,那就太棒了!

    先谢谢你的帮助, 最好的,鲍里斯

    1 个答案:

    答案 0 :(得分: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>
    

    只是一个通俗易懂的代码片段,但应引导您朝着您的目标前进。

    此致