找不到模板时使 Twig 回退到 404 页面

Make Twig fallback to a 404 page when template not found

我将 Twig 用作我网站的独立模板引擎。我正在使用一个名为 Macaw 的简单路由器,它采用 "pretty URL" 并告诉 Twig 像这样呈现适当的页面:

Macaw::get('/(:any)', function($slug) {
    echo $GLOBALS['twig']->render('@pages/'.$slug.'.html');
});

一切正常,除非我尝试加载一个不存在的页面,我会收到一个可怕的错误,例如

Fatal error: Uncaught exception 'Twig_Error_Loader' with message 'Unable to find template "@pages/this-link-is-bad-and-you-should-feel-bad.html"

我认为这是一件非常简单的事情,但我无法从逻辑上理解它,而且我在 Twig 文档中找不到任何关于如何处理它的内容。我有点希望 twig->render() 有一个后备页面参数或一个页面数组除外,但显然没有。

答案只是在呈现页面时使用 try/catch 块。我切换到 Slim 进行路由,但它对 Macaw 没有任何影响。所以现在我有这样的东西:

try {
    $app->render("pages/$slug.html", $data);
} catch (Exception $e) {
    $app->render('pages/404.html', array('error'=> $e));
}