2

OK、私は Flex/ActionScript のバックグラウンドから来ました。この分野はゆっくりと死につつあるので、フルタイムの PHP に移行する時が来たと考えています。
とにかく、私は Zend フレームワークについてかなりよく理解していると思います (私が働いていたほとんどの場所でそれを使用していました)。ただし、ほとんどの場合、テーブルの抽象クラスにのみ使用されたため、モデルのように、MVC の適切なプラクティスではありませんでした。
インタビューに行くと、ほとんどの場合、フォームの検証はどこで行われるのかと尋ねられます.
これで、zend にはフォーム バリデータが組み込まれていることがわかりましたが、それについては話していません。
ビューで構築され、サーバーに送信される標準の HTML フォームについて話しています。

私が知りたいのは、コントロールとモデルのどちらで行うのがよいかということです。

また、なぜ zend_form を使用するのかというと、私には、デザイナーがそれをセクシーにするのは難しいように思えます。

4

2 に答える 2

1

バリデーターをフォーム要素にアタッチしている場合、フォームはコントローラーで検証され、単純な if() ループを使用してチェックできます。

if($form->isValid($postData)) {
    //do some stuff
}

それ以外の場合は、 Zend_Filter_Inputを使用して、コントローラー内の単純な html フォームまたはその他の入力を検証できます。

//set filters and validators for Zend_Filter_Input
    $filters = array(
        'id' => array('HtmlEntities', 'StripTags')
    );

    $validators = array(
        'id' => array('NotEmpty', 'Int')
    );

    //assign Input
    $input = new Zend_Filter_Input($filters, $validators);
    $input->setData($this->getRequest()->getParams());
if ($input->isValid()) {
//do some stuff
}

どちらの方法でも、コントローラーで少なくとも基本的な検証とフィルタリングを実行して、クロスサイト スクリプティングと SQL インジェクションを防止しようとします。
必要に応じて、ドメイン モデルでより深い検証とフィルタリングをいつでも実行できます。

Zend_Form を使用する理由については、最初に見たときほど悪くはありません。バリデーターとフィルターをカスタム メッセージに添付する機能は、一部の人々にとって非常に便利です。デコレーターは最初は難しいですが、練習すればうまく活用できます。また、ごまかしてviewScript() デコレーターを使用するだけです (私が通常行うように)。viewScript デコレーターは、より使い慣れた形式で多くの制御を提供します。

次に例を示します。

//The Form
class Application_Form_Search extends Zend_Form
{
    public function init() {
        $this->setMethod('POST');
        $this->setDecorators(array(
            array('ViewScript', array(
                    'viewScript' => '_searchForm.phtml'//the partial script used as a decorator
            ))
        ));
        // create new element
        $query = $this->createElement('text', 'query');
        // element options
        $query->setLabel('Search Keywords');
        $query->setAttribs(array('placeholder' => 'Artist or Title',
            'size' => 27,
        ));
        // add the element to the form
        $this->addElement($query);

        $submit = $this->createElement('submit', 'search');
        $submit->setLabel('Search Site');
        $submit->setDecorators(array('ViewHelper'));
        $this->addElement($submit);
    }
}

部分スクリプト:

<article class="search">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th><?php echo $this->element->query->renderLabel() ?></th>
            </tr>
            <tr>
                <td><?php echo $this->element->query->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->search ?></td>
            </tr>
        </table> 
    </form>
</article>

ご覧のとおり、これはコードにとってより馴染みがあり、デザイナーがスタイルを設定するのがはるかに簡単になります。

これが役に立てば幸いです、頑張ってください...

于 2012-06-29T08:02:40.553 に答える
0

検証はモデルの一部です。これは、一部のエンティティを検証するビジネス ロジックを認識しているが、コントローラー内で使用されるためです。

Zend_Form には ViewScript のようなデコレータが付属しているため、desinger はそれを魅力的なものにし、開発者はフォーム入力の検証、フィルタリング、入力を簡単に行うことができます。

于 2012-06-29T08:03:38.927 に答える