Я использую прут с Symfony2, и моя структура проекта:Как зарегистрировать расширение Twig в services.yaml?
/myprojectroot
/app
/config
services.yml
bootstrap.php
/src
/Foo
/Bar
/Util
myextension.php
Я следую this documentation создать свое расширение, но я считаю, что это сведения о пространствах имен, путей и регистрации отсутствует. Я также прошел через detailed doc, но это не помогло.
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 }
services.yml загружается bootstrap.php с этим кодом:
$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;
});
}
}
Конечно, я спрашиваю, потому что я m получение ошибки
Twig_Error_Syntax: Функц. ионного «genqr» не существует
так что я удивляюсь, что случилось. Я полагаю, проблема в том, как я зарегистрирую ее.
Может кто-нибудь объяснить мне, что представляет собой разная часть регистрационного кода и что я должен использовать для его работы?
Я исправил свои функции getFunctions(), но ошибка сохраняется. – 0xFF
Загружает ли ваш 'app/config/config.yml' ваш файл' services.yaml'? (также измените его на 'services.yml' для согласованности) –
Это не так, сервисы загружаются в bootstrap.php, я добавлю код. – 0xFF