0

質問

Lithium インストールの'default'レイアウトには、次のコードがあります。

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

すべての通常のリクエスト (たとえば/path/to/framework/users/login、 whereUsersはモデルで、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


バックグラウンド

以下の 2 つのリンクは、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 に答える