Zend Framework 3如何将模板渲染到变量?API生成PDF遇问题
首先肯定你的思路没问题——通过PhpRenderer渲染ViewModel获取HTML字符串,再传给dompdf生成PDF,这个流程完全合理。没结果也没报错,大概率是配置或细节上的疏漏,给你几个排查方向:
先验证模板映射的正确性
先确认$this->templateMap里的路径绝对正确,你可以在代码里加一行调试:var_dump($this->templateMap['index/index'], file_exists($this->templateMap['index/index']));如果
file_exists返回false,说明路径写错了(比如__DIR__的层级不对,多了或少了../),这时候Renderer找不到模板,自然输出空内容。检查变量传递的格式
模板里用的是$this->var,但你调用$vm->setVariables($var)时,$var必须是关联数组,比如:$var = ['var' => '我是要显示的内容'];如果
$var是单个字符串或者非数组类型,setVariables不会正确把变量注入模板,最终渲染出来的就是空的<span></span>,看起来像没生成内容。开启错误提示,抓隐藏的问题
没有报错可能是错误被PHP或框架抑制了,你可以临时开启全量错误提示:error_reporting(E_ALL); ini_set('display_errors', 1); // 同时给PhpRenderer开启调试模式 $renderer->setDebug(true);这样如果有模板文件不存在、变量未定义这类问题,就能直接看到报错信息,定位起来会快很多。
简化测试,缩小问题范围
先把index.phtml的内容改成固定文本:<span>测试渲染内容</span>再运行代码看
$content是否能拿到这段字符串。如果能,说明是变量传递的问题;如果还是空,那肯定是TemplateMapResolver的配置或者Renderer的初始化有问题。确认ViewModel的模板设置
可以打印$vm->getTemplate(),确认它确实是'index/index',有没有拼写错误(比如大小写、斜杠方向)。
按照这个顺序排查,应该能很快找到问题所在。
内容的提问来源于stack exchange,提问作者Dimas

