一週間もほったらかした上にいきなりお詫びからです。
前々回、前回に扱った「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' );
}
}
また、postDataへ直接getPost()の値を割り当てているのではなく、array_merge()
セコメントをする