gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:36:43 28 4
gpt4 key购买 nike

环顾四周,但找不到任何解决问题的方法。我制作了一个自定义 PHP MVC(使用来自各种来源的帮助),使用 Twig 的模板引擎并且渲染工作正常。我添加了一个自定义错误处理程序,它也可以正常工作。我设置了一个常量来显示开发中的错误,但在生产中只记录它们并呈现自定义 404 和 500 View 。当为这个特定选项调用 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

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

错误.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');
}
}

查看.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
}

最佳答案

我收到了完全相同的错误消息。对我来说,问题是,我忘记将 baseTemplate 放在引号中,这是我在要呈现的模板中扩展的。

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

关于php - 传递给 Twig\Environment::getTemplateClass() 的参数 1 必须是字符串类型,给定为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62584294/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com