Zend_Form与CSS

时间:2012-05-17 07:47:00

标签: zend-framework zend-form zend-form-element zend-decorators

我是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?

2 个答案:

答案 0 :(得分:3)

Zend Form很难用,特别是装饰者。

您应该使用View Script装饰器。

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

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

这不是一件好事,特别是如果你有前端开发人员的样式并使用表单。

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

据说,Zend Form可以很好地进行验证。但另一个抱怨的是,我认为它不适合模型验证。

答案 1 :(得分: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在那里,您可以找到如何实现自己的标记的线索。