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 回答