传递给 Twig\Environment::getTemplateClass() 的参数 1 必须是字符串类型,给定 null

Fab*_*ois 2 php twig

环顾四周,但找不到任何可以解决问题的东西。我制作了一个自定义 PHP MVC(使用各种来源的帮助),使用 Twig 的模板引擎并且渲染效果很好。我添加了一个自定义错误处理程序,它也有效。我设置了一个常量来显示开发中的错误,但在产品中只需记录它们并渲染自定义 404 和 500 视图。当为此特定选项调用 twig render($template) 函数时,它只会返回以下错误:

Fatal error: Uncaught TypeError: Argument 1 passed to Twig\Environment::getTemplateClass() must be of the type string, null given, called in
C:\Users\duboi\OneDrive\Documents\Programming\www\fabrice\vendor\twig\twig\src\Template.php on line 321 and defined in
C:\Users\duboi\OneDrive\Documents\Programming\www\fabrice\vendor\twig\twig\src\Environment.php on line 259
Run Code Online (Sandbox Code Playgroud)

不触发 404 和 500 http 请求时没有任何问题。(现有的路由/控制器/操作)我从列出的错误中查看了 Twig 的类,并注意到导致问题的参数是 $name ,public function \Twig\Environment::getTemplateClass($name, int $index = null): string 我跟踪了函数调用,并在每个变量上执行了 var_dump() ,最终成为$name 参数。所有显示\vendor\twig\twig\src\Environment.php:279:string '404.html' (length=8)哪个是字符串且不为空。为什么错误说是这样?

错误.php:

public static function exceptionHandler($exception) {
    $code = $exception->getCode();
    if ($code != 404) {
        $code = 500;
    }
        
    http_response_code($code);
        
    if (\App\Config::SHOW_ERRORS) {
  [....]
    } else {
        $log = ROOT . DS . 'logs' . DS . date('Y-m-d') . '.txt';
        ini_set('error_log', $log);
        
        $message = "Uncaught Exception: '" . get_class($exception) . "'";
        $message .= " with message '" . $exception->getMessage() . "'";
        $message .= "\nStack trace: " . $exception->getTraceAsString();
        $message .= "\nThrown in '" . $exception->getFile() . "' on line " . $exception->getLine();
        
        error_log($message);
        View::renderTemplate($code . '.html');
    }
}
Run Code Online (Sandbox Code Playgroud)

查看.php:

public static function renderTemplate($template, $args = []) {
    static $twig = null;
    
    if ($twig === null) {
        $loader = new \Twig\Loader\FilesystemLoader(ROOT . DS . 'App' . DS . 'Views');
        $twig = new \Twig\Environment($loader);
    }
    echo $twig->render($template, $args); // this is the point of my code when the error occurs
}
Run Code Online (Sandbox Code Playgroud)

小智 6

我有完全相同的错误消息。对我来说,问题是,我忘记baseTemplate在引号中加上引号,这是我在要渲染的模板中扩展的。

(我有{% extends firstTwigBaseTemplate.html %} 代替 {% extends "firstTwigBaseTemplate.html" %})