2012-06-22 37 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' 。 –