0

问题

'default'我的锂安装布局中,我有以下代码:

<?php echo $this->html->script(array('jquery-1.7.1-dev.js')); ?>

对于所有正常请求(例如/path/to/framework/users/loginUsers模型在哪里,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('lithium\action\Dispatcher::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'
    ));
}

我已经深入研究了代码lithium\template\view\Renderer::applyHandler以及File执行实际渲染的适配器以尝试理解这种行为,并且我也尝试向数组添加一个'elements'键,但我有点卡住了。非常感谢任何建议或帮助。'paths'$view


背景

下面的两个链接显示了如何使用ErrorHandler::apply函数(如上面的代码)和ErrorHandler::config. 两者都使用与上述代码相同的方法来渲染视图,第一种方法对这篇文章也很有趣,因为它还展示了如何以不同的方式处理不同类型的错误。

4

1 回答 1

1

框架的组件从Request对象中获取它们的应用程序基路径信息,View类将其委托给它的助手,当然除非它自己没有收到它。

在您的情况下,您可以将其传递'request'View的构造函数,或者更新为更现代版本的错误处理代码,如下所示:https ://github.com/UnionOfRAD/framework/blob/master/app /config/bootstrap/errors.php

于 2012-09-28T19:19:25.607 回答