Как украсить «ошибки» с помощью стандартных декораторов? - PullRequest
1 голос
/ 02 марта 2010

Я установил декораторы формы следующим образом:

    <?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 Ответ

1 голос
/ 04 марта 2010

Я предлагаю вам создать собственный декоратор ошибок, который будет делать то, что вам нужно.
Например, вы можете настроить его на вывод

    </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:)

...