在Silex微框架(symfony-forms)

时间:2015-11-12 05:49:08

标签: twig symfony-forms silex twig-extension

我正在玩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 debuger那里得到了这个错误:

  

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

如果我注释掉这行代码:

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

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

这是twig调试扩展的问题吗?也许有些不相容?。

我不需要使用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"
    }
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;
        }));