Thursday, November 29, 2012

Re: Throwing a custom 503 exception in CakePHP 2

The second suggestion calls for using require, instead of App::uses

in your bootstrap.php, something like 

require ROOT . DS . APP . DS . 'Error' . DS . 'exceptions.php';

And just have exceptions.php in app/Error, mimicking/mirroring placement in lib/Cake/Error.

You may need to double check if ROOT . DS . APP is the right combo of definitions to use.

Regards
Reuben Helms

On Friday, 30 November 2012 10:00:18 UTC+10, mercury12 wrote:
I tried your second suggestion. In "app/Lib/Error" I created "exceptions.php" and put the "ServiceUnavailableException" class inside this file.

Then I wrote this into "bootstrap.php":
App::uses('exceptions', 'Lib/Error');

 But I get the same error?

On Friday, November 30, 2012 1:51:36 AM UTC+2, Reuben wrote:
Looking at App::uses(), it expects the first parameter to be a classname, rather than a file name

Perhaps doing App::uses('ServiceUnavailableException', 'Lib'), and renaming the file to ServiceUnavailableException.php might be better, and more in keeping with the convention of one class per file.

When Cake bootstraps its own exceptions (in lib/Cake/bootstrap.php), it does a require CAKE . 'Error' . DS . 'exceptions.php';  You could possibly follow their lead, and bundle all your exceptions in app/Error/exceptions.php, then require that from your bootstrap. Then you wouldn't need to use App::uses() at all.

On Friday, 30 November 2012 09:32:34 UTC+10, mercury12 wrote:
Then I also put "App:uses()" inside bootstrap and inside controller class.
But still I got the same error.


On Friday, November 30, 2012 1:29:20 AM UTC+2, Reuben wrote:
You would probably need to have the App::uses() in your controller, rather than the bootstrap.

I'm not sure what the best method of including the new exception type, from the bootstrap, other than a include_once() statement.. and that doesn't look nice.  I've always been a bit lazy and have just included the class definition for the new exception directly in the bootstrap.php, and that's not particularly nice either.

Regards
Reuben Helms

On Friday, 30 November 2012 09:20:30 UTC+10, mercury12 wrote:

I need to give a 503 Service Unavailable HTTP header.

Normally I use these for 404 and 500 codes

throw new NotFoundException();  throw new InternalErrorException();

But I couldn't find relevant exception for 503 in CakePHP 2.2?

In my "app/lib/AppExceptionHandler.php" file I have this class/function that handles errors.

class AppExceptionHandler {      public static function handle($error) {       }

Edit:

  • Inside "app/Lib" folder I created a file named "MyExceptions.php". I wrote the following code inside this file:

    class ServiceUnavailableException extends CakeException {    protected $_messageTemplate = 'Service is not available now';    }
  • In "bootstrap.php" I wrote this:

    App::uses('MyExceptions', 'Lib');

  • Then inside "MyNewController.php" file I wrote this:

    throw new ServiceUnavailableException("tryout");

But then I get this error when I throw this exception:

Fatal error: Class 'ServiceUnavailableException' not found in   /var/www/vhosts/example.com/httpdocs/app/Controller/MyNewController.php   on line 3560    Warning (2): Cannot modify header information - headers already sent by  (output started at   /var/www/vhosts/example.com/httpdocs/app/Controller/MyNewController.php:3560)  [APP/Lib/AppExceptionHandler.php, line 19]

What do I miss? Thank you

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
 
---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.
 
 

No comments: