0

我是zend的新手,我在某种程度上已经编码,但不知道如何使用装饰器等来装饰我的表单

这是我的旧 HTML

<div class="col_6 pre_3 padding_top_60" style="padding-top:0">
<div class="widget clearfix">
    <div class="widget_inside">
        <p class="margin_bottom_15">Kindly enter Username and  Password.</p>
        <span><?= $this->error;?></span>
        <form method='post' action='<?php echo $this->url(array(), 'login') ?>' onsubmit="return validateForm();">
            <div class="form">
                <div class="clearfix" id="div_username">
                    <label class="lable-2">Username</label>
                    <div class="input">
                        <input type="text" class="xlarge" name="username" id="username" value="<?php echo $this->form['username'] ?>"/>
                        <span id="error_message_username"></span>
                    </div>
                </div>
                <div class="clearfix" id="div_password">
                    <label class="lable-2">Password</label>
                    <div class="input">
                        <input type="password" class="xlarge" name="password" id="password" value="<?php echo $this->form['password'] ?>"/>
                        <span id="error_message_Password"></span>
                    </div>
                </div>
                <div class="clearfix">
                <label></label>
                    <div class="input">
                        <input type="checkbox" name="remember" value="1" <?php echo ($this->form['remember'] == 1)?'checked="checked"':'' ?>/></span> Stay signed in
                        <span style="margin-left:10px">Forgot <a href="javascript: void(0);" rel="UserID" id="forgot_userid">User ID</a> or <a href="javascript: void(0);" rel="Password" id="forgot_password">Password</a> </span>
                    </div>
                </div>

                <div class="clearfix">
                    <label></label>
                    <div class="input">
                        <input type="submit" value="Login"  class="medium button blue blue-1"/>
                </div> </div>
            </div>
        </form>
    </div>
</div>

这是我的表格

<?php

class Application_Form_Loginform extends Zend_Form{

public function init()
{
    /* Form Elements & Other Definitions Here ... */

    $this->setMethod('post');
    $this->addElement('text','username',array(
        'label'     => 'UserName :',
        'required'  => true,
        'filters'   => array('StringTrim')
    ));

    $this->addElement('password','password',array(
        'label'    => 'Password',
        'required' => 'true',
        'filters'  => array('StringTrim')
    ));
    $this->addElement('submit','submit',array(
       'ignore'=>'true',
       'label'=>'Login'
    ));
}

}

问题是我怎样才能使我用 php 制作的表单等于上面的 HTML ?

4

2 回答 2

3

Zend Form 使用起来很痛苦,尤其是装饰器。

您应该改用 View Script 装饰器。

见这里: http: //framework.zend.com/manual/en/zend.form.standardDecorators.html#zend.form.standardDecorators.viewScript

除了具有高学习曲线的 Zend Form 装饰器之外,它将视图代码与逻辑和验证代码混合在一起。

这不是一件好事,特别是如果您有前端开发人员设计和使用表单。

由于您必须不断调整装饰器代码,因此它也使表单外观的原型制作变得困难。

话虽如此,Zend Form 在使验证相对轻松方面做得很好。但另一个抱怨是我认为它不太适合模型验证。

于 2012-05-17T07:51:50.197 回答
3

我同意装饰器很复杂,但是当您知道如何使用它们时,它们可以节省大量时间。我们将它们用于我们的管理面板。我们最近将它从表格布局更改为几个字段集和 div,只花了几个小时就更改了 70 多个表单。

你的验证器应该是这样的:

Form:
form, 
htmlTag (div, class=form)
formElements

Elements:
viewHelper
error, placement => append
htmlTag (div, class input)
Label, placement => prepend
htmlTag (div, class=clearfix)

请记住,您需要为每个 htmlTag 装饰器设置不同的键,否则它们将被覆盖。像这样:

....
array('inputHtmlTag' => 'htmlTag, array('tag' => 'div', 'class' => 'input'), 
....

要了解我如何处理复杂的 Twitter Bootstrap 装饰器,请参阅https://github.com/tomasfejfar/Zend-Form-Bootstrap/blob/master/library/Bootstrap/Form.php在那里您可以找到如何实现自己的标记的线索。

于 2012-05-18T18:09:45.770 回答