![](/img/trans.png)
[英]Symfony 5 bundle services.yaml - no extension able to load the configuration
[英]How to register a Twig Extension in services.yaml?
我将细枝与Symfony2一起使用,我的项目结构为:
/myprojectroot
/app
/config
services.yml
bootstrap.php
/src
/Foo
/Bar
/Util
myextension.php
我正在遵循本文档来创建扩展,但是我发现它缺少有关名称空间,路径和注册的详细信息。 我也阅读了详细的文档,但并没有太大帮助。
services:
app.twig_extension: <---What is this line? Just a name?
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension } <--- Should I ever change that?
我的扩展名定义为:
编辑:我根据杰森·罗马的答案更正了我的getFunctions(),但错误仍然存在。
namespace Foo\Bar\Util;
class QrCodeHandler extends \Twig_Extension
{
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('genqr', 'generateQRcode'),
);
}
public function generateQRcode($data)
{
//snip code...
}
public function getName()
{
return 'qr_extension';
}
}
和我的services.yaml:
services:
qr_extension:
class: Foo\Bar\Util\QrCodeHandler
public: false
tags:
- { name: twig.extension }
bootstrap.php用以下代码加载services.yml:
$services = $parser->parse(__DIR__ . '/config/services.yml');
if (isset($services['services']))
{
foreach ( $services['services'] as $name => $class )
{
$app['service.' . $name] = $app->share(function (Application $app) use($class) {
$service = new $class($app);
if (!$service instanceof ServiceInterface)
{
$errorMessage = get_class($service) . ' must implement ServiceInterface.';
$app['monolog']->addError($errorMessage);
throw new \Exception($errorMessage);
}
return $service;
});
}
}
我当然要问,因为我遇到了错误
Twig_Error_Syntax:函数“ genqr”不存在
所以我想知道怎么了 我想问题是我如何注册它。
有人可以告诉我注册码的各个部分是什么,我应该使用它做什么?
您在错误地声明您的自定义函数。 应该是这样的:
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('genqr', array($this, 'generateQRcode')),
);
}
这样可以确保从您的类中调用generateQRcode
方法。 关于您的其他问题:
services:
app.twig_extension: <---What is this line? Just a name?
是的,那只是服务的名称。 只要确保此名称是唯一的即可。
tags:
- { name: twig.extension } <--- Should I ever change that?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.