Wow, My bad. I totally forgot about Zend_Controller_Exception. Thanks for
your recommendation.
Dinh
On 12/17/06, Matthew Weier O'Phinney <[EMAIL PROTECTED]> wrote:
-- Dinh <[EMAIL PROTECTED]> wrote
(on Sunday, 17 December 2006, 09:08 PM +0700):
> I wonder what is the proper way to catch Exception in bootstrap file. In
my
> code, I have done as follows:
>
> try
> {
> $controller = Zend_Controller_Front::getInstance();
>
> $controller->throwExceptions(true);
> $response = $controller->setControllerDirectory('./app/controllers')
> ->setRequest($request)
> ->setRouter($router)
> ->setBaseUrl($baseUrl)
> ->dispatch();
>
> echo $response;
Btw, the same changeset that introduced throwExceptions() also made the
front controller send response output by default, so it's no longer
necessary to grab and echo the $response object. If you want the front
controller not to render the response object and return it instead, use
$controller->returnResponse(true).
> }
> catch (Zend_Controller_Dispatcher_Exception $ex)
> {
> $request = $controller->getRequest();
> echo "Exception: ".$request->getControllerName()."Controller class
not
> found. ".$request->getActionName()."Action() not found. ";
> }
>
>
> However, it only works with URL like this:
http://domain/NotExistedController/
> notExistedActionForSure
>
> my try{} catch does not have any effect when user types: http://domain/
> ExistedController/notExistedAction . Exception can not be caught so it
> displayed as follows:
>
> Zend_Controller_Exception: IndexController::doAction() does not exist
and was
> not trapped in __call() in D:\webroot\Zend_Framework\library\Zend.php on
line
> 229 Call Stack: 0.0095 1. {main}()
D:\webroot\uproject\helloworld\index.php:0
> 0.2894 2. Zend_Controller_Front->dispatch()
D:\webroot\uproject\helloworld\
> index.php:103
>
> Is there anyway to catch this kind of exception?
In your try/catch block above, you only catch
Zend_Controller_Dispatcher_Exceptions. The second exception you display
is a Zend_Controller_Exception. You should modify your try/catch block
to add a second catch for these, or have the catch block catch a more
generic type of exception:
try {
// ...
} catch (Zend_Controller_Dispatcher_Exception $e) {
// dispatcher exceptions
} catch (Zend_Controller_Exception $e) {
// controller exceptions
}
// you could do even more here...
or:
try {
// ...
} catch (Exception $e) {
// handle any exception
}
--
Matthew Weier O'Phinney
PHP Developer | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/
--
Nobody in nowhere