Zend Framework изящно обрабатывает исключения в производственной среде - PullRequest
3 голосов
/ 31 января 2010

Мое приложение успешно обрабатывает ошибки в разработке, как ошибки, так и исключения. Когда я переключаюсь на производство, приложение просто возвращает пустую страницу, так как конфигурация настроена так, чтобы не отображать ошибки. Существует ли в ZF стандартный метод отправки посетителей на красиво отформатированную «Страница не найдена» с использованием макета из приложения, чтобы они не отображались на пустой странице. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Обычно, если вы использовали CLI для создания проекта Zend, он уже сможет делать то, что вы запрашиваете. Если вы перейдете к scripts / view / errors / error.phtml, который будет файлом phtml, который вы можете использовать для создания представления, которое вы хотите использовать.

Хотя, если вы не использовали CLI для создания Zend-проекта, ниже будет сгенерированный ErrorController, используемый

<?php

class ErrorController extends Nanaly_Controller
{

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

        // Log exception, if logger available
        if ($log = $this->getLog()) {
            $log->crit($this->view->message, $errors->exception);
        }

        // conditionally display exceptions
        if ($this->getInvokeArg('displayExceptions') == true) {
            $this->view->exception = $errors->exception;
        }

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

    public function getLog()
    {
        $bootstrap = $this->getInvokeArg('bootstrap');
        if (!$bootstrap->hasPluginResource('Log')) {
            return false;
        }
        $log = $bootstrap->getResource('Log');
        return $log;
    }


}

Примечание: этот контроллер был создан с использованием Zend версии 1.10.0

и вид должен быть расположен в том же месте, как указано ранее.

2 голосов
/ 31 января 2010

Вы можете сделать это с помощью специального ErrorController, например:

http://www.talkincode.com/a-useful-error-controller-class-for-zend-framework-applications-729.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...