代码之家  ›  专栏  ›  技术社区  ›  Jeremy Hicks

Zend窗体-如何创建这些自定义窗体元素?

  •  1
  • Jeremy Hicks  · 技术社区  · 16 年前

    这是一个非常具体的实例,我很难获得Zend表单来生成正确的输出并提供正确的验证。我可能需要创建一个复合元素,但我想我应该先问一下。这是我试图让Zend表单生成的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>
    

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   Jeremy Hicks    16 年前

    经过多次调整后,终于找到了答案,但希望这个答案能帮助其他人。因为我还在为预算值进行验证(通过重写表单的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'))
        ));
    
    推荐文章