0

アプリケーションディレクトリのformディレクトリにあるzendformを使用してフォームを作成しました。コントローラでこのフォームのインスタンスを作成しました。

public function getBookSlotForm(){
        return new Application_Form_BookSlot();
    }
public function bookSlotAction()
    {
    $form = $this->getBookSlotForm();
    $this->view->form = $form;
    }

そしてそれをビューのユーザーに表示しました:

echo $this->form;

ユーザーがフォームに入力するときに、そのデータをモデルの変数に保存するにはどうすればよいですか?

4

2 に答える 2

1

ティムは彼の知る限り正しいですが、もう少し詳細が必要なようです。フォームをページに表示することに問題はないようです。これで、そのフォームからコントローラーにデータを取得し、必要なモデルにデータを取得するのは非常に簡単です。

この例では、フォームで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;
}
于 2012-05-04T11:20:57.557 に答える
0

典型的なワークフローは次のとおりです。

public function bookSlotAction()
{
    $form = $this->getBookSlotForm();
    if ($form->isValid($this->getRequest()->getPost()) {
        // do stuff and then redirect
    }

    $this->view->form = $form;
}

isValid()を呼び出すと、データもフォームオブジェクトに保存されるため、検証が失敗した場合、ユーザーが入力したデータが入力された状態でフォームが再表示されます。

于 2012-05-04T08:37:43.180 に答える