that's great to know, "errors always use the default layouts". :)
didn't see it in the manual..

thanks a tons for the solution.


On Jul 16, 7:52 pm, rtconner <[EMAIL PROTECTED]> wrote:
> Ah.. phpjoy, I had the same problem. There is no easy solution so far
> as I could find. No good solution that I liked anyways. Errors always
> use the default layout, and there is nothing you can do to change
> that.
>
> .. So.. the best solution as I could figure is this..
>
> Create /app/error.php and copy and paste ErrorHandler into it. Then
> modify it to read "class AppError extends ErrorHandler"
>
> The modify the file to handle dynamic layouts. Here I'll make it easy
> and just copy and past my (Cake 1.2) error.php file for you. Hope this
> helps.
>
> --------------------------------
> <?php
>
> /**
>  * Override defaults cake error behavior
>  */
> class AppError extends ErrorHandler {
>
>         var $layout = 'error';
>
> /**
>  * Displays an error page (e.g. 404 Not found).
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function error($params) {
>                 extract($params);
>                 $this->controller->base = $base;
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->viewPath='errors';
>                 $this->controller->set(array('code' => $code,
>                                                                               
>   'name' => $name,
>                                                                               
>   'message' => $message,
>                                                                               
>   'title' => $code . ' ' . $name));
>                 $this->controller->render('error404', $this->layout);
>                 exit();
>         }
> /**
>  * Convenience method to display a 404 page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function error404($params) {
>                 extract($params);
>
>                 if (!isset($url)) {
>                         $url = $action;
>                 }
>                 if (!isset($message)) {
>                         $message = '';
>                 }
>                 if (!isset($base)) {
>                         $base = '';
>                 }
>
>                 header("HTTP/1.0 404 Not Found");
>                 $this->error(array('code' => '404',
>                                                         'name' => 'Not found',
>                                                         'message' => 
> sprintf(__("The requested address %s was not found
> on this server.", true), $url, $message),
>                                                         'base' => $base));
>                 exit();
>         }
> /**
>  * Renders the Missing Controller web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingController($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->webroot = $webroot;
>                 $this->controller->viewPath ='errors';
>                 $controllerName = str_replace('Controller', '', $className);
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'controllerName' => $controllerName,
>                                                                               
>   'title' => __('Missing Controller', true)));
>                 $this->controller->render('missingController', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Action web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingAction($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->webroot = $webroot;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'action' => $action,
>                                                                               
>   'title' => __('Missing Method in Controller', true)));
>                 $this->controller->render('missingAction', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Private Action web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function privateAction($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->webroot = $webroot;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'action' => $action,
>                                                                               
>   'title' => __('Trying to access private method in class',
> true)));
>                 $this->controller->render('privateAction', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Table web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingTable($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('model' => $className,
>                                                                               
>   'table' => $table,
>                                                                               
>   'title' => __('Missing Database Table', true)));
>                 $this->controller->render('missingTable', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Database web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingDatabase($params = array()) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('title' => __('Scaffold Missing
> Database Connection', true)));
>                 $this->controller->render('missingScaffolddb', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing View web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingView($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'action' => $action,
>                                                                               
>   'file' => $file,
>                                                                               
>   'title' => __('Missing View', true)));
>                 $this->controller->render('missingView', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Layout web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingLayout($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->layout = 'default';
>                 $this->controller->set(array('file'  => $file,
>                                                                               
>   'title' => __('Missing Layout', true)));
>                 $this->controller->render('missingLayout', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Database Connection web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingConnection($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('model' => $className,
>                                                                               
>   'title' => __('Missing Database Connection', true)));
>                 $this->controller->render('missingConnection', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Helper file web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingHelperFile($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('helperClass' =>
> Inflector::camelize($helper) . "Helper",
>                                                                               
>   'file' => $file,
>                                                                               
>   'title' => __('Missing Helper File', true)));
>                 $this->controller->render('missingHelperFile', $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Helper class web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingHelperClass($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('helperClass' =>
> Inflector::camelize($helper) . "Helper",
>                                                                               
>   'file' => $file,
>                                                                               
>   'title' => __('Missing Helper Class', true)));
>                 $this->controller->render('missingHelperClass', 
> $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Component file web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingComponentFile($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'component' => $component,
>                                                                               
>   'file' => $file,
>                                                                               
>   'title' => __('Missing Component File', true)));
>                 $this->controller->render('missingComponentFile', 
> $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Component class web page.
>  *
>  * @param array $params Parameters for controller
>  * @access public
>  */
>         function missingComponentClass($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('controller' => $className,
>                                                                               
>   'component' => $component,
>                                                                               
>   'file' => $file,
>                                                                               
>   'title' => __('Missing Component Class', true)));
>                 $this->controller->render('missingComponentClass', 
> $this->layout);
>                 exit();
>         }
> /**
>  * Renders the Missing Model class web page.
>  *
>  * @param unknown_type $params Parameters for controller
>  * @access public
>  */
>         function missingModel($params) {
>                 extract(Router::getPaths());
>                 extract($params, EXTR_OVERWRITE);
>
>                 $this->controller->base = $base;
>                 $this->controller->viewPath = 'errors';
>                 $this->controller->webroot = $this->_webroot();
>                 $this->controller->set(array('model' => $className,
>                                                                               
>   'title' => __('Missing Model', true)));
>                 $this->controller->render('missingModel', $this->layout);
>                 exit();
>         }
>
> }
>
> ?>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to