OK、私は Flex/ActionScript のバックグラウンドから来ました。この分野はゆっくりと死につつあるので、フルタイムの PHP に移行する時が来たと考えています。
とにかく、私は Zend フレームワークについてかなりよく理解していると思います (私が働いていたほとんどの場所でそれを使用していました)。ただし、ほとんどの場合、テーブルの抽象クラスにのみ使用されたため、モデルのように、MVC の適切なプラクティスではありませんでした。
インタビューに行くと、ほとんどの場合、フォームの検証はどこで行われるのかと尋ねられます.
これで、zend にはフォーム バリデータが組み込まれていることがわかりましたが、それについては話していません。
ビューで構築され、サーバーに送信される標準の HTML フォームについて話しています。
私が知りたいのは、コントロールとモデルのどちらで行うのがよいかということです。
また、なぜ zend_form を使用するのかというと、私には、デザイナーがそれをセクシーにするのは難しいように思えます。
2 に答える
バリデーターをフォーム要素にアタッチしている場合、フォームはコントローラーで検証され、単純な 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>
ご覧のとおり、これはコードにとってより馴染みがあり、デザイナーがスタイルを設定するのがはるかに簡単になります。
これが役に立てば幸いです、頑張ってください...
検証はモデルの一部です。これは、一部のエンティティを検証するビジネス ロジックを認識しているが、コントローラー内で使用されるためです。
Zend_Form には ViewScript のようなデコレータが付属しているため、desinger はそれを魅力的なものにし、開発者はフォーム入力の検証、フィルタリング、入力を簡単に行うことができます。