尝试使用 Symfony 模板组件加载模板时,您请求了一个不存在的参数 "name" 错误
You have requested a non-existent parameter "name" error when trying to load a template using Symfony templating component
我正在使用 Symfony 模板组件向我正在处理的项目添加模板功能,我正在关注文档 here 但我正在使用服务容器 Symfony 组件并在文档中添加代码使用此代码:
$containerBuilder->register('template_name_parser', Symfony\Component\Templating\TemplateNameParser::class);
$containerBuilder->register('file_system_loader', Symfony\Component\Templating\Loader\FilesystemLoader::class)
->setArguments([realpath('./') . '/app/Views/%name%']);
$containerBuilder->register('templating', Symfony\Component\Templating\PhpEngine::class)
->setArguments([new Reference('template_name_parser'), new Reference('file_system_loader')]);
但是当我尝试使用此代码加载模板文件时:
container->get('templating')->render('home.php')
我收到这个错误:
Something went wrong! (You have requested a non-existent parameter
"name".)
因此,正如@yceruto 提到的,Symfony DI 会将 %%
之间的字符串视为参数,因此为了转义它,我们需要在提到的 here 之前添加 %
,所以我这样更新了我的代码:
$containerBuilder->register('file_system_loader', Symfony\Component\Templating\Loader\FilesystemLoader::class)
->setArguments([realpath('./') . '/app/Views/%%name%']);
我正在使用 Symfony 模板组件向我正在处理的项目添加模板功能,我正在关注文档 here 但我正在使用服务容器 Symfony 组件并在文档中添加代码使用此代码:
$containerBuilder->register('template_name_parser', Symfony\Component\Templating\TemplateNameParser::class);
$containerBuilder->register('file_system_loader', Symfony\Component\Templating\Loader\FilesystemLoader::class)
->setArguments([realpath('./') . '/app/Views/%name%']);
$containerBuilder->register('templating', Symfony\Component\Templating\PhpEngine::class)
->setArguments([new Reference('template_name_parser'), new Reference('file_system_loader')]);
但是当我尝试使用此代码加载模板文件时:
container->get('templating')->render('home.php')
我收到这个错误:
Something went wrong! (You have requested a non-existent parameter "name".)
因此,正如@yceruto 提到的,Symfony DI 会将 %%
之间的字符串视为参数,因此为了转义它,我们需要在提到的 here 之前添加 %
,所以我这样更新了我的代码:
$containerBuilder->register('file_system_loader', Symfony\Component\Templating\Loader\FilesystemLoader::class)
->setArguments([realpath('./') . '/app/Views/%%name%']);