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は、特にデコレータを使用するのが面倒です。

代わりに、ViewScriptデコレータを使用する必要があります。

ここを参照してください:http://framework.zend.com/manual/en/zend.form.standardDecorators.html#zend.form.standardDecorators.viewScript

学習曲線が高いZendFormデコレータは別として、ビューコードとロジックおよび検証コードを組み合わせています。

これは、特にフロントエンド開発者がフォームのスタイルを設定して操作している場合は、良いことではありません。

また、デコレータコードを調整し続ける必要があるため、フォームの外観のプロトタイピングが困難になります。

そうは言っても、Zend Formは、検証を比較的簡単にするという優れた仕事をします。しかし、もう1つの不満は、モデルの検証にうまく適合しないと思うことです。

于 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'), 
....

複雑なTwitterBootstrapデコレータの処理方法については、https://github.com/tomasfejfar/Zend-Form-Bootstrap/blob/master/library/Bootstrap/Form.phpを参照してください。独自のマークアップを実装する方法の手がかりがあります。

于 2012-05-18T18:09:45.770 に答える