CakePHP 2.0 – 如何制作自定义错误页面?
我读了AppError类现在是为了向后兼容,应该使用Exceptions来代替。 如何创build自定义错误页面,如404错误,或完全自定义错误?
尝试这个:
/app/Config/core.php
exception渲染需要设置为AppExceptionRender
。 例:
Configure::write('Exception', array( 'handler' => 'ErrorHandler::handleException', 'renderer' => 'AppExceptionRenderer', 'log' => true ));
/app/Controller/ErrorsController.php
class ErrorsController extends AppController { public $name = 'Errors'; public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('error404'); } public function error404() { //$this->layout = 'default'; } }
/app/Lib/Error/AppExceptionRenderer.php
App::uses('ExceptionRenderer', 'Error'); class AppExceptionRenderer extends ExceptionRenderer { public function notFound($error) { $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404')); } }
/app/View/Errors/error404.ctp
<div class="inner404"> <h2>404 Error - Page Not Found</h2> </div>
把它插入你需要的地方: throw new NotFoundException();
要自定义404错误页面的内容并且不需要自定义逻辑,只需编辑app/View/Errors/error400.ctp
的内容app/View/Errors/error400.ctp
。
这似乎没有被正确地logging在任何地方。
如果您只想使用其他布局而不是默认布局 ,只需添加$this->layout = 'your_error_layout';
在你的error400.ctp里面(或者你在View / Errors下创build的任何其他错误页面)。
创build名称为404或任何其他的布局,并在应用程序控制器中使用
function _setErrorLayout() { if ($this->name == 'CakeError') { $this->layout = '404'; } } function beforeRender () { $this->_setErrorLayout(); }
接受的答案不是最好的select,因为他们将浏览器的URLredirect到http://example.com.br/error/error404
,用户无法关注他input的页面来产生这个错误。
处理这种情况的更好的方法是在View/Errors/error400.ctp
上编辑文件,所以当你input一个没有find的URL如http:example.com/crazy-wrong-url
,浏览器会保留这个url,但是呈现内容您编辑的error400.ctp
文件。
如果你想改变视图的布局,你可以在你的视图中input<?php $this->layout = 'error'; ?>
<?php $this->layout = 'error'; ?>
你可以通过创build一个你要显示的错误class
来创buildCustomErrorPages
或者Exeptions
。 这个类需要扩展CakeExeption
。 然后build立你的exeptionlogic和你的设置。 现在你可以throw new <YourExeptionClass>()
,它会显示一个错误。
文档: CakeExceptions
今天发现可以使用$error->getCode()
(至less在CakePHP 2.x中$error->getCode()
获得ctp文件中的excpetion代码。
$error
是蛋糕把exception对象…
现在,您应该可以使用if/else
条件块来更改视图的内容,该值位于此值中。