重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

皆さん、お世話になります。

Zend frameworkで、練習として掲示板を作っていまして、
リダイレクトした時にデータを受け渡す方法を調べています。

環境
PHP5.2.8 + Zend framework1.7.1
windowsXP & Linux

■処理遷移
入力→確認→投稿完了

■画面遷移
トップ画面→確認画面→トップ画面

トップ画面で入力フォームと記事の表示を行い、投稿された時は確認画面を挟み、投稿が反映されたトップ画面へと戻ります。

投稿時、フォームより入力されたデータに問題が無い場合は確認画面へ遷移させますが、
不備があった場合、一度トップ画面へリダイレクトし、どの項目に不備があったかを入力欄の横に表示させてあげたいと思っています。

フォワードだとURLが変わってしまうので、リダイレクトを使っています。

どこの項目かというデータをリダイレクトした時に渡してあげたいのですが、なにか方法はありますでしょうか?

リダイレクトだとリクエストが全てリセットされてしまって、POSTなどで渡す事が出来ませんでした。

また、リダイレクト以外でURLを変えずに値を渡す方法などもあるのでしょうか?

まだまだ未熟で大した知識もございません。
どうぞよろしくお願いいたします<(_ _)>

A 回答 (2件)

Zend_Filter_Inputを使うとsubmitしたときにバリデーションをかけることができます。



<?php
if ($_POST) {
$input = new Zend_Filter_Input($this->_filters, $this->_validators, $method, $options);
if ($input->isValid()) {

// DBへの処理
$res = $db->hoge($input->getUnescaped());

if ($res) {
$this->view->result = true;
} else {
$this->view->result = false;
$this->view->assign($_POST);
}
} else {
$errors = $input->getInvalid();
$this->view->e = $errors;
$this->view->assign($method);
}
}

エラー時はview側で $this->e でエラー原因がとれます。
<input type="text" name="email" value="<?php echo if (isset($this->email) ? $this->email : '' ?>
とかすればpostされた値がフォームに入ります。
    • good
    • 0

リダイレクトだとか、フォワードだとか使わず。



入力画面->確認画面
の途中にバリデート処理をかけてるんだと思います。

バリデートを正常に通過したら、確認画面のテンプレートを。
バリデートで異常だったら、エラーメッセージをアサインして入力画面のテンプレートを

って切り替えるだけです。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます!

私の勘違いだったら申し訳ないのですが、
テンプレートの切り替えというと
$this->_helper->viewRenderer()を使うという事でしょうか?

今、トップ画面(indexAction:index.phtml)から
確認画面(confirmAction:confirm.phtml)へと遷移し、
確認画面の時に入力チェックを行っているのですが、
viewRendererで切り替えると、画面表示は大丈夫ですが、URLが確認画面のものになってしまいます。

やりたい事としては、
/bbs/ トップ画面

/bbs/index/confirm/ 確認画面

エラー

/bbs/ トップ画面(エラーメッセージも表示)

トップ画面へ戻してあげた時に、一緒にエラーに関するデータも送ってあげたいと思っています。

私が無知で本当に申し訳ないのですが、
もう少しだけ具体的にお教え願えますでしょうか。
よろしくお願いします!!

お礼日時:2009/01/31 19:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!