0

エラーが発生します:「twig extension FatalErrorException: Error: Class Acme\Bundle\MyBundle\Twig not found in app/cache/dev/appDevDebugProjectContainer.php」

キャッシュをクリアしましたが、これは何もしません。

セットアップをテストしようとしているだけで、すべてのロジックを入れることができます。

--

MyTwigExtensions.php という名前のファイル

namespace Acme\Bundle\MyBundle\Twig;

class MyTwigExtensions extends \Twig_Extension
{

    public function getFunctions() {    
        return array(
            new Twig_SimpleFunction('link', 'generate_link')
        );
    }

    public function generate_link($params) {

        return "THE-LINK-HERE";

    }

    public function getName() {

        return "link";

    }

}

services.yml 内

services:
  my_extension.twig.extension:
    class: Acme\Bundle\MyBundle\Twig
    arguments: []
    tags:
      - { name: twig.extension }
4

3 に答える 3

3

拡張クラスの完全修飾名を入力する必要があります。

services:
  my_extension.twig.extension:
    class: Acme\Bundle\MyBundle\Twig\MyTwigExtensions # <--- here
    arguments: []
    tags:
      - { name: twig.extension }
于 2013-03-29T13:17:28.017 に答える
1

サービスの表現形式は、このように sth です。以下の addArrowInCode は、twig で使用されるメソッドの名前です。

twig.extension.addArrowInCode:
       class: Acme\DemoBundle\Twig\AddArrowInCodeExtension
       tags:
           - { name: twig.extension }

この拡張機能では、次のようにする必要があります...

class AddArrowInCodeExtension extends \Twig_Extension
{
    function addArrowInCodeFilter($code, $separator = '&rArr;')
    {
        // do sth setting final

        return $final;
    }

    /**
     * Returns a list of filters to add to the existing list.
     *
     * @return array An array of filters
     */
    public function getFilters()
    {
        return array(
            'addArrowInCode' => new Twig_Filter_Method($this, 'addArrowInCodeFilter', array('needs_environment' => false)),
        );
    }

    public function getName()
    {
        return 'addArrowInCode';
    }
}

それが役に立てば幸い

于 2013-03-29T13:49:13.407 に答える