ティムは彼が行く限り正しいですが、少し詳細が必要なようです。フォームにページを表示させることに問題はないようです。そのフォームからコントローラにデータを取得し、必要なモデルにデータを取得することは、簡単で簡単です。
この例では、フォームにpostメソッドを使用していると仮定します。
フォームをPHPアプリケーションに投稿すると、配列形式のデータが$_POST
変数に送信されます。 ZFではこの変数はリクエストオブジェクトにfrontcontrollerに格納され、$this->getRequest()->getPost()
で、通常はアクセスされ、値の連想配列を返します。Zend_Form
を拡張フォームを使用しているとき、あなたのフォームにアクセスしなければならない特殊なケースとして
//for example $this->getRequest->getPost();
POST array(2) {
["query"] => string(4) "joel"
["search"] => string(23) "Search Music Collection"
}
//for example $this->getRequest()->getParams();
PARAMS array(5) {
["module"] => string(5) "music"
["controller"] => string(5) "index"
["action"] => string(7) "display"
["query"] => string(4) "joel"
["search"] => string(23) "Search Music Collection"
}
$form->getValues()
を使用すると、フォームフィルターが適用されたフォーム値が返されます。getPost()
とgetParams()
はフォームフィルターを適用しません。だから今我々はモデルに値を送信するプロセスから受けているかを知ること
は非常に単純です:
public function bookSlotAction()
{
$form = $this->getBookSlotForm();
//make sure the form has posted
if ($this->getRequest()->isPost()){
//make sure the $_POST data passes validation
if ($form->isValid($this->getRequest()->getPost()) {
//get filtered and validated form values
$data = $form->getValues();
//instantiate your model
$model = yourModel();
//use data to work with model as required
$model->sendData($data);
}
//if form is not vaild populate form for resubmission
$form->populate($this->getRequest()->getPost());
}
//if form has been posted the form will be displayed
$this->view->form = $form;
}