2016-07-02 2 views
1

독립 실행 형 양식을 symfony3 및 나뭇 가지로 만들 수 있습니까? 이 오류가 과거를 얻을 수 없습니다메시지가있는 'Twig_Error_Syntax'알 수없는 "form_start"기능

Fatal error: Uncaught exception 'Twig_Error_Syntax' with message 'Unknown "form_start" function in "new.html.twig" at line 1

3.1 documentationthis example를 인용, 잘 작동하지만 실제로 사용하고 2.7

screenshot of example

내 간단한 프로젝트는 다음과 같이 구성되어 있습니다

. 
├── composer.json 
├── composer.lock 
├── src 
│   └── form.php 
├── vendor 
│   └── ... 
└── views 
    └── new.html.twig 

form.php

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

use Symfony\Component\Form\Forms; 
use Symfony\Bridge\Twig\Extension\FormExtension; 
use Symfony\Bridge\Twig\Form\TwigRenderer; 
use Symfony\Bridge\Twig\Form\TwigRendererEngine; 

// the Twig file that holds all the default markup for rendering forms 
// this file comes with TwigBridge 
$defaultFormTheme = 'form_div_layout.html.twig'; 

$vendorDir = realpath(__DIR__.'/../vendor'); 
// the path to TwigBridge library so Twig can locate the 
// form_div_layout.html.twig file 
$appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable'); 
$vendorTwigBridgeDir = dirname($appVariableReflection->getFileName()); 
// the path to your other templates 
$viewsDir = realpath(__DIR__.'/../views'); 

$twig = new Twig_Environment(new Twig_Loader_Filesystem(array(
    $viewsDir, 
    $vendorTwigBridgeDir.'/Resources/views/Form', 
))); 
$formEngine = new TwigRendererEngine(array($defaultFormTheme)); 
$formEngine->setEnvironment($twig); 

// create your form factory as normal 
$formFactory = Forms::createFormFactoryBuilder() 
    ->getFormFactory(); 

use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 

$form = $formFactory->createBuilder() 
    ->add('task', TextType::class) 
    ->add('dueDate', DateType::class) 
    ->getForm(); 

var_dump($twig->render('new.html.twig', array(
    'form' => $form->createView(), 
))); 

new.html.twig

{{ form_start(form) }} 
    {{ form_widget(form) }} 

    <input type="submit" /> 
{{ form_end(form) }} 

composer.json

{ 
    "require": { 
     "symfony/form": "^3.1", 
     "symfony/twig-bridge": "^3.1", 
     "twig/twig": "^1.24" 
    } 
} 

전체 오류 스택 추적

Fatal error: Uncaught exception 'Twig_Error_Syntax' with message 'Unknown "form_start" function in "new.html.twig" at line 1.' in /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php:574 
Stack trace: 
#0 /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php(351): Twig_ExpressionParser-&gt;getFunctionNodeClass('form_start', 1) 
#1 /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php(144): Twig_ExpressionParser-&gt;getFunctionNode('form_start', 1) 
#2 /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php(84): Twig_ExpressionParser-&gt;parsePrimaryExpression() 
#3 /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php(41): Twig_ExpressionParser-&gt;getPrimary() 
#4 /var/www/a/forms/vendor/twig/twig/lib/Twig/Parser.php(144): Twig_ExpressionParser-&gt;parseExpression() 
#5 /var/www/a/forms/vendor/twig/twig/lib/Twig/Parser.php(100): Twig_Parser-&gt;subparse(NULL, false) 
#6 /var/www/a/forms/vendor/twig/twig/lib/Twig/Environment.php(619): Twig_Parser-&gt;parse(Object(Twig_TokenStream)) 
#7 /var/www/a/forms/ in /var/www/a/forms/vendor/twig/twig/lib/Twig/ExpressionParser.php</b> on line 574 

답변

3

는 전을 추가, as per the exemple you provided, 당신이 시도 되세요 장력 FormExtension ~ Twig_Environment?

$twig$formEngine 변수를 초기화 한 후 바로 다음 코드를 추가합니다

$twig->addExtension(
    new FormExtension(new TwigRenderer($formEngine)) 
); 

그런 다음 알 수있는 trans()에 대해 오류가 발생합니다. symfony/translation 패키지를 추가하여 수정하십시오 : $ composer require symfony/translation.

$twig->addExtension(
    new TranslationExtension(new Translator('en')) 
); 

용도 잊지 마세요 :

그리고 나뭇 가지가 위와 같은 방법으로이 새로운 확장에 대해 알려

use Symfony\Bridge\Twig\Extension\TranslationExtension; 
use Symfony\Component\Translation\Translator; 
+0

흠 덕분에, 도움이 될 수 있지만, 실제로 ' 'Twig_Error_Syntax'메시지가 'Unknown'trans "filter in"form_div_layout.html.twig " –

+0

그래, 그게 알 수없는'form_start()'문제가 해결되었다는 것을 의미한다. 그러나 실제로 또 다른 장미. – D4V1D

+0

'form_start()'전에 새로운 오류가 발생하여 오류가 발생하기 전에 오류가 발생하기 때문에이 오류가 수정되었는지 확신 할 수 없습니다. –