0

I'm calling a method that I know could cause an error and I'm trying to handle the error by wrapping the code in a try/catch statement...

class TestController extends Zend_Controller_Action
{

    public function init()
    {
        // Anything here happens BEFORE the View has rendered
    }

    public function indexAction()
    {
        // Anything `echo`ed here is added to the end of the View
        $model = new Application_Model_Testing('Mark', 31);
        $this->view->sentence = $model->test();
        $this->loadDataWhichCouldCauseError();
        $this->loadView($model); // this method 'forwards' the Action onto another Controller
    }

    private function loadDataWhichCouldCauseError()
    {
        try {
            $test = new Application_Model_NonExistent();
        } catch (Exception $e) {
            echo 'Handle the error';
        }
    }

    private function loadView($model)
    {
        // Let's pretend we have loads of Models that require different Views
        switch (get_class($model)) {
            case 'Application_Model_Testing':
                // Controller's have a `_forward` method to pass the Action onto another Controller
                // The following line forwards to an `indexAction` within the `BlahController`
                // It also passes some data onto the `BlahController`
                $this->_forward('index', 'blah', null, array('data' => 'some data'));
                break;
        }
    }

}

...but the problem I have is that the error isn't being handled. When viewing the application I get the following error...

( ! ) Fatal error: Class 'Application_Model_NonExistent' not found in /Library/WebServer/Documents/ZendTest/application/controllers/TestController.php on line 23

Can any one explain why this is happening and how I can get it to work?

Thanks

Integralist
  • 2,161
  • 1
  • 32
  • 50
  • possible duplicate of [How do I catch a PHP Fatal Error](http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error) – dm03514 Feb 22 '13 at 18:11

4 Answers4

3

use

if (class_exists('Application_Model_NonExistent')) {
    $test = new Application_Model_NonExistent;
} else {
    echo 'class not found.';
}

like @prodigitalson said you can't catch that fatal error.

Amit Kriplani
  • 682
  • 5
  • 12
2

An error and an exception are not the same thing. Exceptions are thrown and meant to be caught, where errors are generally unrecoverable and triggered with http://www.php.net/manual/en/function.trigger-error.php

If you need to do some cleanup because of an error, you can use http://www.php.net/manual/en/function.set-error-handler.php

Community
  • 1
  • 1
Ruan Mendes
  • 90,375
  • 31
  • 153
  • 217
0

Thats not an exception, thats a FATAL error meaning you cant catch it like that. By definition a FATAL should not be recoverable.

prodigitalson
  • 60,050
  • 10
  • 100
  • 114
0

Exception and Error are different things. There is an Exception class, which you are using and that $e is it's object.

You want to handle errors, check error handling in php-zend framework. But here, this is a Fatal error, you must rectify it, can not be handled.

Mayukh Roy
  • 1,815
  • 3
  • 19
  • 31