1

ユーザーが ID 値 (例: /students/view/42) を含むリンクからページに到達するアプリケーションがあります。私のコードでは、次のように Zend_Filter_Input を使用しています。

$input = new Zend_Filter_Input(array(), array(
    'id' => new Zend_Validate_Db_RecordExists(array (
        'table' => 'Students',
        'field' => 'id'
     )
), $this->_request->getParams());
if (!$input->isValid()) {
    // ???
}

これまでのところ、地球を破壊するようなことは何もないと思います。ただし、idの値が無効な場合の対処方法は不明です。

著書 Zend Framework: A Beginner's Guide で、Vikram Vaswani はユーザーに例外 (Zend_Controller_Action_Exception('Page Not Found', 404)) をスローさせています。これはこれを処理するための最良の方法ですか? そうでない場合、他にどのようなオプションがありますか?

4

1 に答える 1

2

ユーザーを 404 エラーの説明のあるページ (例外メッセージのレンダリングには ErrorController を使用する必要があります) にリダイレクトするか、そのような学生が存在しないというメッセージのある特定のページにリダイレクトする必要があります。

例外をスローして、ErrorController でエラー ページをレンダリングするだけです。

次のようにできます。

 $this->getResponse()->setHttpResponseCode(404);

また

throw new Zend_Controller_Action_Exception('This page does not exist', 404);

典型的な ErrorController クラスは次のとおりです。

class ErrorController extends Zend_Controller_Action
{
    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                $this->getResponse()
                     ->setRawHeader('HTTP/1.1 404 Not Found');

                // ... get some output to display...
                break;
            default:
                // application error; display error page, but don't
                // change status code
                break;
        }
    }
}
于 2013-05-10T01:47:30.387 に答える