質問
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
。どちらも上記のコードと同じアプローチを使用してビューをレンダリングします。最初のコードは、さまざまな種類のエラーを異なる方法で処理する方法も示しているため、この投稿にとって興味深いものです。
- 例 1 - マソム
- 例 2 - Lithium wiki
ErrorHandler::apply
-関数の使用方法を示します