ZendFramework入門・その5 フォームを取り扱う・その3
2007-09-17


お詫びというか訂正というか訂正しないというか

一週間もほったらかした上にいきなりお詫びからです。

前々回前回に扱った「zf2」のIndexController::dumpActionですが、前々回では「$this->getRequest()->getParams()」としていたところを、前回掲載のソースでは「$this->getRequest()->getPost()」とメソッドが変わっていました。どこかで変更した検証コードをそのまま確かめもせずに掲載してしまったようです。

フォームのメソッドがPOSTなので機能上はほとんど違いがないのですが、なんの断りもなく違うメソッドになっていたので混乱された方もいらっしゃるかもしれませんのでここでお詫びいたします。申し訳ありませんでした。

今回も引き続き「zf2」を流用しますが、あえて「getParams()」に戻す理由もないので、今回も「getPost()」のままにしますのでご了承ください。

入力内容を検査し、動作を変える

さて、今回の内容です。

前回まででフォームの内容をサーバに送信し、その内容を確認するところまで作りました。今回はそれに少しだけ機能を足して、

といった感じにしてみましょう。

この仕様変更に伴い、以下の処理を追加する必要があります。

これらを順を追って実装していきましょう。

入力内容をフォームへ反映させる準備

まず、未入力項目があった場合への対応で、入力フォーム(=indexAction+index.phtml)へ、POSTされた内容を反映させる準備をします。

といっても特別なことではなく、前回までのdumpActionで行っていたように、getPost()で取得した連想配列をviewへassignするだけです。

dumpActionでやっていた、「$this->veiw->assign('postData', $this->getRequest()->getPost()」をそのままindexActionの先頭に記述してもいいのですが、どのみち今回の仕様では未入力の有無にかかわらずビューへ入力データを渡す必要があるので、共通の処理としましょう。そう、init()内で行ってしまうのです。

そして、実際のフォームフィールドへの反映ですが、これまた単純で、HTMLフォームの値として、ビュースクリプト内でechoするだけになります。

ここまでのコードを掲載します。まずはIndexController。

<?php
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action {
  // 初期化処理
  public function init() {
    // リクエストオブジェクトの取得
    $request = $this->getRequest();
    
    // BASE要素向けのベースURL
    $this->view->assign(
      'baseUrl',
      getApplicationUrl( $request )
    )->assign(
      'postData',
      array_merge(
        array(
          'name' => '',
          'mail' => '',
          'sex' => 1
        ),$request->getPost()
      )
    );
  }
  
  // indexアクション
  public function indexAction() {
  }
  
  // dumpアクション
  public function dumpAction() {
    // postDataへの割り当てをinit()に移動したため
    // ここではなにもしない
  }
  
  public function __call($name, $args) {
    $this->_forward( 'index' );
  }
}
IndexController.php
基本的にdumpActionで行っていた'postData'への割り当てをinitに移しただけですが、'baseUrl'への割り当てでもZend_Requestを使用するため、先にローカル変数「$request」にZend_Requestを割り当てるようにしています。また、assignでメソッドチェーンを適用しています。

また、postDataへ直接getPost()の値を割り当てているのではなく、array_merge()


続きを読む

[PHP]
[Zend Framework]
[Zend Framework 入門]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット