Мое приложение ZF генерирует исключение вместо возврата 404 для URL-адресов, которые действительно 404s. Например. testlotto.ie/rrr должен быть 404, но я получаю следующее:Zend Exception вместо 404
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (rrr)' in /mnt/pc/sites/git-lotto/lotto/irish-lotto/library/Zend/Controller/Dispatcher/Standard.php:
Я попытался предложения по Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' while creating object of model class и Uncaught exception 'Zend_Controller_Dispatcher_Exception' (а также многие другие), и ничего не работает.
У меня есть контроллер ErrorController в директории ../application/controllers, который является тем, что возвращается, когда я умираю() из getControllerDirectory() из Controller/Dispatcher/Standard.php, поэтому проблем с контроллером не является найденный.
Мой ErrorController выглядит следующим образом (не то, что это имеет значение, поскольку он не вызывался):
<?php
class ErrorController extends Zend_Controller_Action
{
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->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
$content =<<<EOH
<h1>Unlucky!</h1>
<p>The url you entered is not a valid one - please check what you typed, the mistake is most likely there.</p>
EOH;
break;
default:
// application error
$content =<<<EOH
<h1>Error!</h1>
<p>An unexpected error occurred. Please try again later.</p>
EOH;
break;
}
// Clear previous content
$this->getResponse()->clearBody();
$this->view->content = $content;
}
}
Начало метода депешу является:
public function dispatch(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response)
{
$this->setResponse($response);
/**
* Get controller class
*/
if (!$this->isDispatchable($request)) {
$controller = $request->getControllerName();
//die($controller);
//$this->setParam('useDefaultControllerAlways',true);
//ErrorController::errorAction();
if (!$this->getParam('useDefaultControllerAlways') && !empty($controller)) {
require_once 'Zend/Controller/Dispatcher/Exception.php';
throw new Zend_Controller_Dispatcher_Exception('Invalid controller specified (' . $request->getControllerName() . ')');
}
$className = $this->getDefaultControllerClass($request);
Как вы можете видеть, я попробовал, как было предложено установить setParam ('useDefaultControllerAlways', true) ;, но все это достигается, когда страница веб-сайта отображается (стандартный контроллер, конечно) с кодом ответа 200. Мне нужно 404.
Кроме того, $ controller умирает как «rrr» в этом примере.
Мой вопрос - что мне нужно сделать, чтобы вернуть 404? Это использовалось для работы на моем сайте - я просто менял серверы, и теперь он не работает.
См. Http://framework.zend.com/issues/browse/ZF-3465 – user3173104
Я не думаю, что это проблема, поскольку пустой ($ controller) не является правдой (контроллер входит как 'rrr' Например, они всегда «перенаправляются на индекс/индекс», что не то, что происходит для меня. Я получаю исключение, указанное в деталях сообщения выше. – pokero
Я имею в виду последний пост splits 'if (! $ this-> getParam ('useDefaultControllerAlways') &&! empty ($ controller)) 'условие в 2 частях. Вторая часть говорит' if (! empty ($ controller)) 'ie, а не пустой контроллер. Вы попробовали это? – user3173104