aWebDeveloper
aWebDeveloper

Reputation: 38332

PHP using exit()

I am using Cakephp but this is a MVC/php doubt

letting the view display the message

vs

echo 'Invalid Data'; exit;

I would like to know is there any pitfalls in the second case like memory leak etc.. Which one is better

EDIT

In case of a ajax call is exit good. and what about memory leak and other issues . Are all variables deallocated

Upvotes: 3

Views: 499

Answers (4)

deceze
deceze

Reputation: 521995

The Cake tools to signal errors to the user are session messages and error views.

For "passive" actions like view actions, you should throw a 404 or similar, possibly more specialized error, e.g. if the requested model does not exist:

function view($id) {
    $data = $this->Model->read(null, $id);
    if (!$data) {
        $this->cakeError('error404');
    }

    ...
}

See Error Handling with CakePHP.

For any POST action, you should return the user to the view and display an error message using $this->Session->setFlash('Error!') and appropriate error messages for each invalid form field. That's the default behavior of baked views and controllers.

Terminating the whole script with exit makes for a miserable user experience.

Upvotes: 3

Frankie
Frankie

Reputation: 25165

performance-wise (AJAX cals)

Use exit().


user experience-wise (standard site nav)

Show the error in a proper formated page keeping the user within your site.

Upvotes: 0

user187291
user187291

Reputation: 53940

In general, you should avoid exit. Exit is an abnormal termination, and programs should not terminate abnormally. Even if an error occurs, there are still many things that needs to be done - cleanup, logging, notifying the user etc. After all, your operating system doesn't reboot every time it cannot open a file.

Upvotes: 0

halfdan
halfdan

Reputation: 34204

You should use a custom ExceptionHandler (set_error_handler / set_exception_handler) and throw an Exception if you encounter any errors (CakePHP should already provide an ExceptionHandler). Make some space in your view and if the ExceptionHandler/ErrorHandler has a message, show it there to let the user know.

Your second code will just produce a blank page containing the little text. Every user will appreciate if you show the message inside your usual page layout instead of producing a blank page (which looks broken to most people).

Upvotes: 6

Related Questions