Symfony2 プロジェクトで、Twig_ExtensionInterface を実装するサービスを作成したので、Twig フィルターとして使用できます。{{ stuff|my_filter }}
このサービスでは、たとえば twig テンプレートを使用できるように twig 環境を使用する必要があるため、サービスで実行できるようにそれを注入しました。
services.yml で:
services:
meta.twig.my_extension:
class: Acme\GeneralBundle\Twig\MyExtension
tags:
- { name: twig.extension }
arguments:
twig: "@twig"
したがって、サービス自体は次のようになります。
<?php
namespace Acme\GeneralBundle\Twig;
class MyExtension extends \Twig_Extension
{
public function __construct($twig)
{
$this->twig = $twig;
}
public function getFilters()
{
return array(
'my_filter' => new \Twig_Filter_Method($this, 'myFunction'),
);
}
public function myFunction($text)
{
return $this->twig->render($someTemplate,$someArguments);
}
}
そして、私はそのようなコントローラーでそれを使用できます:
$myService = $this->container->get('Acme.twig.my_extension');
$text = $myService->myFunction($someValue);
しかし、もちろん、そうすると CircularReference エラーが発生します。
Circular reference detected for service "Acme.twig.my_extension",
path: "Acme.twig.my_extension -> twig".
では、カスタム Twig Filter 内で twig->render() 関数を使用する最良の方法は何ですか?
どうもありがとう !