简体   繁体   English

Zend Framework路由引发URL上带有感叹号的应用程序错误

[英]Zend Framework routing throws an application error for trailing exclamation point on URL

I have a view that works correctly when "http://localhost/public/account/test" is visited, but when an exclamation point is added ("http://localhost/public/account/test!"), I get an application error; 当访问“ http:// localhost / public / account / test”时,我有一个视图可以正常工作,但是当添加感叹号(“ http:// localhost / public / account / test!”)时,我得到一个视图应用程序错误; however, I'm expecting a 404 error to occur. 但是,我预计会发生404错误。 There is only a testAction() method in the controller, not a test-Action() method (as if PHP even would let me get away with that). 控制器中只有testAction()方法,而没有test-Action()方法(就好像PHP会让我摆脱它一样)。 What can I do to get a 404 error to be throw instead? 我该怎么办才能引发404错误?

Here is the details of the application error that I recieve: 这是我收到的应用程序错误的详细信息:

Message: script 'account/test-.phtml' not found in path (/website/application/modules/default/views/scripts/) 消息:在路径(/ website / application / modules / default / views / scripts /)中找不到脚本'account / test-.phtml'

Stack trace: 堆栈跟踪:

    #0 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/View/Abstract.php(876): Zend_View_Abstract->_script('account/test-.p...')
    #1 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(897): Zend_View_Abstract->render('account/test-.p...')
    #2 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('account/test-.p...', NULL)
    #3 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(957): Zend_Controller_Action_Helper_ViewRenderer->render()
    #4 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch()
    #5 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action.php(523): Zend_Controller_Action_HelperBroker->notifyPostDispatch()
    #6 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('testAction')
    #7 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    #8 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
    #9 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
    #10 /website/public/index.php(42): Zend_Application->run()
    #11 {main}
    Request Parameters:
    array(3) {
      ["controller"]=>
      string(7) "account"
      ["action"]=>
      string(5) "test!"
      ["module"]=>
      string(7) "default"
    }

There is a place in ErrorController.php which looks something like this: 在ErrorController.php中有一个地方,看起来像这样:

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

    switch ($errors->type) {
        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()->setHttpResponseCode(404);
            $this->view->message = 'Page not found';
            break;
        default:
            // application error
            $this->getResponse()->setHttpResponseCode(500);
            $this->view->message = 'Application error';
            break;
    }

    $this->view->exception = $errors->exception;
    $this->view->request   = $errors->request;
}

You could adjust it a little bit to cover your case: 您可以稍作调整,以适应您的情况:

    switch ($errors->type) {
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER:

使用urlencode ...

 testAction(urlencode("http://localhost/public/account/test!"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM