Zend Form - как мне создать эти пользовательские элементы формы? - PullRequest
1 голос
/ 08 июня 2010

Это очень специфический случай, когда у меня возникают трудности с получением Zend Form для получения правильного вывода и правильной проверки. Возможно, мне придется создать составной элемент, но я решил сначала спросить здесь. Вот HTML-код, который я пытаюсь заставить создать Zend Form. Мне бы хотелось, чтобы это работало там, где, если проверка не проходит, сообщения об ошибках по-прежнему отображаются в строке с полем, вызвавшим ошибку.

<tr>
    <td>Budget</td>
    <td>
        <input type="radio" name="budget" value="unlimited" /> unlimited
        <br />
        <input type="radio" name="budget" value="limited" /> $ <input type="text" name="budget_amount" /> every <select name="budget_period">
            <option value="day">day</option>
            <option value="week">week</option>
            <option value="month">month</option>
            <option value="year">year</option>
        </select>
    </td>
</tr>
<tr>
    <td></td>
    <td><input type="checkbox" name="include_weekends" value="yes" /> include weekends?</td>
</tr>

Пользователь может выбрать неограниченное или ограниченное значение бюджета, однако, если он выбрал ограниченный, ему необходимо ввести значение в поле суммы бюджета и выбрать значение в поле выбора для поля бюджетного периода. 1004 *

1 Ответ

0 голосов
/ 09 июня 2010

Понял это после множества настроек, но, надеюсь, ответ поможет кому-то еще.Просто собираюсь опубликовать материал декоратора, так как я все еще работаю над проверкой значения бюджета (заставил его работать, переопределив функцию isValid () формы, но сейчас пытаюсь получить ее в пользовательском валидаторе).

    $this->setElementDecorators(array(
        'ViewHelper',
        array(array('data' => 'HtmlTag'), array('tag' => 'td')),
        array('Label', array('tag' => 'td')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
    ));

    $budget->setDecorators(array(
        'ViewHelper',
        array(array('openData' => 'HtmlTag'), array('tag' => 'td', 'openOnly' => true)),
        array('Label', array('tag' => 'td')),
        array(array('openRow' => 'HtmlTag'), array('tag' => 'tr', 'openOnly' => true))
    ));

    $budgetAmount->setDecorators(array(
        'ViewHelper'
    ));

    $budgetPeriod->setDecorators(array(
        'ViewHelper',
        array('AnyMarkup', array('markup' => 'every', 'placement' => 'PREPEND')),
        array(array('closeData' => 'HtmlTag'), array('tag' => 'td', 'closeOnly' => true)),
        array(array('closeRow' => 'HtmlTag'), array('tag' => 'tr', 'closeOnly' => true))
    ));

    $includeWeekends->setDecorators(array(  
        'ViewHelper',
        array('Label', array('placement' => 'APPEND')),
        array(array('data' => 'HtmlTag'), array('tag' => 'td')),
        array(array('emptyRow' => 'HtmlTag'), array('tag' => 'td', 'placement' => 'PREPEND')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
    ));

    $this->setDecorators(array(
        'FormElements',
        array('HtmlTag', array('tag' => 'table')),
        'Form',
        array('FormErrors', array('placement' => 'PREPEND', 'class' => 'error')),
        array('Description', array('placement' => 'PREPEND'))
    ));
...