【问题标题】:Zend Form - how do I create these custom form elements?Zend Form - 我如何创建这些自定义表单元素?
【发布时间】:2010-06-08 14:45:00
【问题描述】:

这是一个非常具体的例子,我很难让 Zend Form 产生正确的输出并提供正确的验证。我可能不得不去创建一个复合元素,但我想我会先在这里问。这是我试图让 Zend Form 生成的 HTML。如果验证未通过,我希望它能够在错误消息仍然与产生错误的字段内联显示的情况下工作。

<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>

用户可以为预算值选择无限或有限,但是,如果他们选择有限,则需要在预算金额字段中输入一个值,并从预算期间字段的选择中选择一个值。

【问题讨论】:

    标签: zend-form decorator


    【解决方案1】:

    经过大量调整后想通了,但希望答案能帮助其他人。只是要发布装饰器的东西,因为我仍在验证预算值(通过覆盖表单的 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'))
        ));
    

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多