2012-05-04 8 views
0

私は、アプリケーションディレクトリのフォームディレクトリにあるzendフォームを使用してフォームを作成しました。私は、コントローラにこのフォームのインスタンスを作成しました:ビュー内のZend_Formによってモデルに提出されたデータを

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

、ビュー内のユーザーにそれを表示:ユーザーがフォームに入力すると

echo $this->form; 

、私は私が保存どのように行うのかモデル内の変数のデータ?

答えて

1

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

この例では、フォームに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; 
} 
0

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

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

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

のisValid()は、フォームオブジェクトのデータを格納しますので、検証が失敗した場合、フォームはユーザーが記入入力されたデータを再表示されます呼び出す

関連する問題