问题
在我的锂电池安装的'default'
布局中,我有以下代码:
<?php echo $this->html->script(array('jquery-1.7.1-dev.js')); ?>
对于所有正常请求(例如/path/to/framework/users/login
,其中Users
是一个模型,并且有一个UsersController::login
方法),它被正确地呈现为:
<script type="text/javascript" src="/path/to/framework/js/jquery-1.7.1-dev.js"></script>`
然而,在由我的错误处理代码呈现的视图中,/path/to/framework
被省略,并且它被呈现为:
<script type="text/javascript" src="/js/jquery-1.7.1-dev.js"></script>
为什么在这种情况下辅助对象没有正确渲染路径
错误处理方法
我的错误处理方法是基于一些在线教程。在config/bootstrap/errors.php
中,我有:
$exampleConditions = array('type' => 'Exception');
ErrorHandler::apply('lithiumactionDispatcher::run', $exampleConditions, function($info, $params) {
return ErrlogsController::handleError($info, $params);
});
ErrorHandler::run();
在ErrlogsController
类中,我有:
public static function handleError($info, $params) {
// (Code to save error info to DB omitted from example)
$view = new View(array(
'paths' => array(
'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
'layout' => '{:library}/views/layouts/{:layout}.{:type}.php'
)
));
return $view->render('all', array(), array(
'template' => '404',
'controller' => 'errlogs',
'layout' => 'default',
'type' => 'html'
));
}
我已经深入研究了lithiumtemplateviewRenderer::applyHandler
和File
适配器的代码,它们进行了实际的渲染,试图理解这种行为,我还尝试向$view
的'paths'
数组添加'elements'
密钥,但我有点卡住了。如有任何建议或帮助,我们将不胜感激。
背景
下面的两个链接显示了如何使用ErrorHandler::apply
函数(如上面的代码所示)以及ErrorHandler::config
。两者都使用与上面代码中相同的方法来呈现视图,第一种方法对本文来说也很有趣,因为它还展示了如何以不同的方式处理不同类型的错误。
- 示例一-masom
- 示例二——Lithium wiki——展示了如何使用
ErrorHandler::apply
函数
框架的组件从Request
对象获取其应用程序基本路径信息,View
类将其委托给其助手,当然,除非它自己还没有收到。
在您的情况下,您可以将其在'request'
密钥中传递给View
的构造函数,或者更新为更现代版本的错误处理代码,如下所示:https://github.com/UnionOfRAD/framework/blob/master/app/config/bootstrap/errors.php