Symfony 4.1 树枝扩展
Symfony 4.1 twig extension
在 Symfony 4.1 中,我创建了一个 twig 扩展,并尝试将其用作服务
twig.extension.active.algos:
class: App\Twig\AppExtension
public: true
tags:
- { name: twig.extension, priority: 1024 }
不幸的是我收到了'Unable to register extension "App\Twig\AppExtension" as it is already registered'
经过多次搜索,我看到 symfony 3.4 版本中有一个包,但他们说错误会解决。所以这是我的错误或者只是 symfony 团队的另一个错误。
我的分机是:
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends \Twig_Extension {
public function getFunctions() {
return array(
new \Twig_SimpleFunction('get_active_algos', array($this, getActiveAlgos')),
);
}
public function getActiveAlgos()
{
return [1,2,3];
}
public function getName()
{
return 'get_active_algos';
}
}
觉得无聊。这是 S4.1 的自定义树枝函数的工作示例。无需服务配置(更新:添加的 $answer 参数除外)。我什至使用 autowire 注入了默认实体管理器,只是因为。
namespace App\Twig;
use Doctrine\ORM\EntityManagerInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class TwigExtension extends AbstractExtension
{
private $em;
private $answer;
public function __construct(EntityManagerInterface $em, int $answer)
{
$this->em = $em;
$this->answer = $answer;
}
public function getFunctions()
{
return array(
new TwigFunction('get_active_algos', [$this, 'getActiveAlgos']),
);
}
public function getActiveAlgos()
{
$dbName = $this->em->getConnection()->getDatabase();
return 'Some Active Algos ' . $dbName . ' ' . $answer;
}
}
更新:根据第一条评论,我更新了示例以显示注入自动装配无法处理的定标器参数。
# services.yaml
App\Twig\TwigExtension:
$answer: 42
请注意,仍然没有必要将服务标记为扩展。 Autoconfig 通过自动标记所有扩展 AbstractExtension.
的 类 来解决这个问题。
在 Symfony 4.1 中,我创建了一个 twig 扩展,并尝试将其用作服务
twig.extension.active.algos:
class: App\Twig\AppExtension
public: true
tags:
- { name: twig.extension, priority: 1024 }
不幸的是我收到了'Unable to register extension "App\Twig\AppExtension" as it is already registered' 经过多次搜索,我看到 symfony 3.4 版本中有一个包,但他们说错误会解决。所以这是我的错误或者只是 symfony 团队的另一个错误。
我的分机是:
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends \Twig_Extension {
public function getFunctions() {
return array(
new \Twig_SimpleFunction('get_active_algos', array($this, getActiveAlgos')),
);
}
public function getActiveAlgos()
{
return [1,2,3];
}
public function getName()
{
return 'get_active_algos';
}
}
觉得无聊。这是 S4.1 的自定义树枝函数的工作示例。无需服务配置(更新:添加的 $answer 参数除外)。我什至使用 autowire 注入了默认实体管理器,只是因为。
namespace App\Twig;
use Doctrine\ORM\EntityManagerInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class TwigExtension extends AbstractExtension
{
private $em;
private $answer;
public function __construct(EntityManagerInterface $em, int $answer)
{
$this->em = $em;
$this->answer = $answer;
}
public function getFunctions()
{
return array(
new TwigFunction('get_active_algos', [$this, 'getActiveAlgos']),
);
}
public function getActiveAlgos()
{
$dbName = $this->em->getConnection()->getDatabase();
return 'Some Active Algos ' . $dbName . ' ' . $answer;
}
}
更新:根据第一条评论,我更新了示例以显示注入自动装配无法处理的定标器参数。
# services.yaml
App\Twig\TwigExtension:
$answer: 42
请注意,仍然没有必要将服务标记为扩展。 Autoconfig 通过自动标记所有扩展 AbstractExtension.
的 类 来解决这个问题。