0

我正在玩 Silex 微框架。首先,我使用 composer 为 Twig 安装了 Twig 扩展:

composer require twig/extensions

我将此配置添加到我的前端控制器(index.php):

// CONFIG 
    // turn on debug in Silex microframework
    $app['debug'] = true;

    // set default twig file location
    // turn on debuging for Twig extension in Silex
    $app->register(new Silex\Provider\TwigServiceProvider(), array(
            'twig.path' => __DIR__.'/../templets',
            'twig.options' => array('debug' => true),
        )
    );
    $app['twig']->addExtension(new Twig_Extension_Debug());

   // Symfony2 extension for building and validating forms in Silex
   $app->register(new Silex\Provider\FormServiceProvider());
   $app->register(new Silex\Provider\ValidatorServiceProvider());
   $app->register(new Silex\Provider\TranslationServiceProvider());

一切都可以按预期工作,但是在使用小部件创建表单时

{{ form_widget(form) }}

我从 Twig 调试器收到此错误:

ExpressionParser.php 第 573 行中的 1/1 Twig_Error_Syntax:第 35 行的“post.twig”中的未知“form_widget”函数。

如果我注释掉这行代码:

// $app['twig']->addExtension(new Twig_Extension_Debug());

在我的前端控制器中,一切正常,表单渲染没有问题。

这是树枝调试扩展的问题吗?也许有些不兼容?

我不需要使用 widget_form 在树枝中呈现我的表单。我只是将它用于快速测试目的,然后才能正确地在 twig 中编写渲染 - 但我仍然看不出 twig 会为此抛出错误的原因。

这是我的 composer.json

{
    "require": {
        "silex/silex": "~1.3",
        "symfony/browser-kit": "~2.3",
        "symfony/console": "~2.3",
        "symfony/config": "~2.3",
        "symfony/css-selector": "~2.3",
        "symfony/dom-crawler": "~2.3",
        "symfony/filesystem": "~2.3",
        "symfony/finder": "~2.3",
        "symfony/form": "~2.3",
        "symfony/locale": "~2.3",
        "symfony/process": "~2.3",
        "symfony/security": "~2.3",
        "symfony/serializer": "~2.3",
        "symfony/translation": "~2.3",
        "symfony/validator": "~2.3",
        "symfony/monolog-bridge": "~2.3",
        "symfony/twig-bridge": "~2.3",
        "doctrine/dbal": ">=2.2.0,<2.4.0-dev",
        "swiftmailer/swiftmailer": "5.*",
        "twig/extensions": "^1.3"
    }
}
4

2 回答 2

0

确保symfony/twig-bridge在集成您的项目。

于 2015-11-13T00:17:38.020 回答
0

我想这个例子为我解决了这个问题(在 Pimple 中包含扩展的新方法):

// CONFIG 

    // turn on debug in silex
    $app['debug'] = true;

    // register twig and enable debug
    $app->register(new Silex\Provider\TwigServiceProvider(), array(
            'twig.path' => __DIR__.'/../templets',
            'twig.options' => array('debug' => true),
        )
    );

        // add twig debug extension in Pimpel (the new way)
        $app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
            $twig->addExtension(new \Twig_Extension_Debug());
            return $twig;
        }));
于 2015-11-13T06:09:50.500 回答