ティムは彼の知る限り正しいですが、もう少し詳細が必要なようです。フォームをページに表示することに問題はないようです。これで、そのフォームからコントローラーにデータを取得し、必要なモデルにデータを取得するのは非常に簡単です。
この例では、フォームでpostメソッドを使用していると想定します。
$_POST
フォームを任意のphpアプリケーションに投稿すると、そのデータが配列形式で変数に送信されます。ZFでは、この変数はリクエストオブジェクトのフロントコントローラーに格納され、通常はでアクセスされ$this->getRequest()->getPost()
、関連付けられた値の配列を返します。
//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"
}
拡張するフォームを使用する場合の特殊なケースとして、を使用しZend_Form
てフォーム値にアクセスする必要があります。$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;
}