2012-06-22 39 views
4

我一直在下面的资源Silex的嫩枝+:form_widget()没有发现,即使Symfony的桥安装

http://silex.sensiolabs.org/doc/providers/form.html

文档以下,但我得到以下错误

Twig_Error_Syntax: The function "form_widget" does not exist in "layout.html.twig" 

我已经多次查看过文档和源代码,但仍然无法看到我要出错的地方,我错过了什么?我安装了Symfony Twig Bridge。

<?php 
require_once __DIR__.'/vendor/autoload.php'; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Yaml\Parser; 

use Silex\Provider\FormServiceProvider; 

$app = new Silex\Application(); 
$app['debug'] = true; 

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path'  => __DIR__. '/src/views', 
    'twig.options' => array(
     'debug' => true, 
     'cache' => false 
    ), 
)); 

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

$app['yaml'] = new Parser(); 



//..... 

$app->register(new FormServiceProvider()); 

$app->register(new Silex\Provider\ValidatorServiceProvider()); 



$site['name'] = 'My Site'; 
// More definitions for $site 

$app->match('/', function() use($app, $site) { 
    return $app['twig']->render('layout.html.twig', $site); 
})->method('POST|GET'); 


$app->match('/form/', function(Request $request) use($app, $site) { 

    $data = array(
     'name' => 'Your name', 
     'email' => 'Your email', 
    ); 

    $form = $app['form.factory']->createBuilder('form', $data) 
     ->add('name') 
     ->getForm(); 

    if ('POST' == $request->getMethod()) { 
     $form->bindRequest($request); 

     if ($form->isValid()) { 
      $data = $form->getData(); 

      // do something with the data - I haven't got that far yet 

      // redirect somewhere 
      return $app->redirect('/'); 
     } 
    } 

    $site['form'] = $form->createView(); 

    return $app['twig']->render('form.html.twig', $site); 

})->method('POST|GET'); 

$app->run(); 

编辑:composer.json文件

{ 
    "require": { 
     "silex/silex"  : "dev-master", 
     "symfony/config" : "dev-master", 
     "symfony/yaml"  : "dev-master", 
     "doctrine/common" : ">=2.1,<2.3-dev", 
     "doctrine/dbal" : ">=2.1,<2.3-dev", 
     "symfony/dependency-injection": "dev-master", 
     "symfony/console" : "dev-master", 
     "monolog/monolog" : ">=1.0.0", 
     "twig/twig"  : ">=1.2.0", 
     "symfony/form"  : "2.1.*", 
     "symfony/translation": "2.1.*", 
     "symfony/twig-bridge": "2.1.*", 
     "symfony/validator": "2.1.*" 
    } 
} 

回答

9

您需要先注册的形式提供,以后树枝提供商。

枝条提供者checks if the form provider is registered,只有在需要时才启用与表格相关的枝条扩展。

+0

'“symfony/twig-bridge”:“2.1。*”'已经在composer.json –

+0

查看我的更新回答。 – Maerlyn

+1

非常感谢,它的工作原理。当我改变代码首先注册FormServiceProvider时,它找不到过滤器'trans',所以我还添加了'$ app-> register(new Silex \ Provider \ TranslationServiceProvider(),array('locale_fallback'=>'en '));'之后,它需要。但后来我收到一个错误:致命错误:在第47行的{mywebsiteroot} \ vendor \ symfony \ translation \ Symfony \ Component \ Translation \ Loader \ XliffFileLoader.php中找不到'Symfony \ Component \ Config \ Resource \ FileResource' 。 –