如何使用标准装饰器来装饰'错误'?

时间:2010-03-02 15:13:56

标签: php zend-framework zend-form zend-decorators

我已经以这种方式设置了表单装饰器:

    <?php

    $this->setElementDecorators(array(
            'Label',
            array(array('labelTd' => 'HtmlTag'), array('tag' => 'td', 'class' => 'name')),
            array(array('elemTdOpen' => 'HtmlTag'), array('tag' => 'td', 'class' => 'form','openOnly' => true, 'placement' => 'append')),
            'ViewHelper',               
            'Errors',           
            array(array('elemTdClose' => 'HtmlTag'), array('tag' => 'td', 'closeOnly' => true, 'placement' => 'append')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr', 'class' => 'question')),
    ));

    $submit->setDecorators(array('ViewHelper',
            array(array('data' => 'HtmlTag'),  array('tag' =>'td', 'class'=> 'element')),
            array(array('emptyrow' => 'HtmlTag'),  array('tag' =>'td', 'class'=> 'element', 'placement' => 'PREPEND')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
            ));

    $this->setDecorators(array(
            'FormElements',
            array('HtmlTag', array('tag' => 'table', 'class' => 'simpleform')),
            'Form'
        ));

它输出一个简单的表

<table class="simpleform">
<tbody>
    <tr class="question">
        <td class="name">
            <label class="required" for="email">Your email</label>
        </td>
        <td class="form">
            <input type="text" value="asasd" id="email" name="email">
            <ul class="errors">
                <li>'asasd' is no valid email address in the basic format local-part@hostname
                </li>
                <li>Information not found
                </li>
            </ul>
        </td>
    </tr>
    <tr>
        <td class="element"></td>
        <td class="element">
            <input type="submit" value="Send" id="submit" name="submit">
        </td>
    </tr>
</tbody>
</table>

我想将ul.errors包装到TD并将其作为第三个单元格。 像那样:

        <tr class="question">
        <td class="name">
            <label class="required" for="email">Your email</label>
        </td>
        <td class="form">
            <input type="text" value="asasd" id="email" name="email">
        </td>
        <td>
            <ul class="errors">
                <li>'asasd' is no valid email address in the basic format local-part@hostname
                </li>
                <li>Information not found
                </li>
            </ul>
        </td>
    </tr>

和..怎么做? :)

1 个答案:

答案 0 :(得分:1)

我建议您创建自己的错误装饰器,它将满足您的需要 例如,您可以将其设置为输出

    </td>
    <td>
        <ul class="errors">
            <li>'asasd' is no valid email address in the basic format local-part@hostname
            </li>
            <li>Information not found
            </li>
        </ul>

如果您知道错误将永远是<td></td>代码中的表格的一部分。

一般而言,没有框架足够灵活,可以涵盖所有场景,而框架不应该减慢开发速度。如果您无法使用框架执行某些操作,并且无法扩展框架以满足您的要求,请绕过它并在此特定情况下不要使用它。并不是说所有表格都必须使用Zend_Form:)