Php 未捕获异常';细枝错误语法';带有消息';“未知”;trans";过滤器';
我有小树枝和Symfony表单组件的问题。我在我的项目中集成了表单和细枝(我使用PHP5.5.9,没有计划更新,所以我在3.4.4版本中使用了所有Symfony必需的组件) 我遵循以下指南: 在页面呈现时,我遇到以下错误: 致命错误:在/symfony/Twig bridge/Resources/views/Form/bootstrap\u 4\u layout.html中出现未捕获的异常“Twig\u error\u Syntax”,消息为“未知的“trans”筛选器”。Twig:158堆栈跟踪 这是我的密码: 使用部分:Php 未捕获异常';细枝错误语法';带有消息';“未知”;trans";过滤器';,php,symfony,twig,Php,Symfony,Twig,我有小树枝和Symfony表单组件的问题。我在我的项目中集成了表单和细枝(我使用PHP5.5.9,没有计划更新,所以我在3.4.4版本中使用了所有Symfony必需的组件) 我遵循以下指南: 在页面呈现时,我遇到以下错误: 致命错误:在/symfony/Twig bridge/Resources/views/Form/bootstrap\u 4\u layout.html中出现未捕获的异常“Twig\u error\u Syntax”,消息为“未知的“trans”筛选器”。Twig:158堆栈跟
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\FormRenderer;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Extension\Validator\ValidatorExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
use Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage;
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Validator\Validation;
use Symfony\Bridge\Twig\Extension\FormExtension;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Bridge\Twig\Form\TwigRendererEngine;
use Symfony\Component\Translation\Loader\XliffFileLoader;
use Symfony\Bridge\Twig\Extension\TranslationExtension;
use Symfony\Component\Translation\Translator;
用于呈现表单的代码:
$defaultFormTheme = 'bootstrap_4_layout.html.twig';
$appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable');
$vendorTwigBridgeDirectory = dirname($appVariableReflection->getFileName());
$viewsDirectory = realpath(__DIR__."/../../app/template/html");
$csrfGenerator = new UriSafeTokenGenerator();
$csrfStorage = new SessionTokenStorage($this->session);
$csrfManager = new CsrfTokenManager($csrfGenerator, $csrfStorage);
$validator = Validation::createValidator();
// Set up the Translation component
$translator = new Translator('it');
$translator->addLoader('xlf', new XliffFileLoader());
$translator->addResource('xlf', $this->libDir.'/symfony/form/Resources/translations/validators.it.xlf', 'it', 'validators');
$translator->addResource('xlf', $this->libDir.'/symfony/validator/Resources/translations/validators.it.xlf', 'it', 'validators');
$loader = new \Twig_Loader_Filesystem(array($viewsDirectory,$vendorTwigBridgeDirectory.'/Resources/views/Form'));
$twig = new \Twig_Environment($loader,array(
'cache' => realpath(__DIR__."/../../app/template/cache"),
'debug' => true,
));
$twig->addExtension(new FormExtension());
$formEngine = new TwigRendererEngine(array($defaultFormTheme), $twig);
$twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array(
FormRenderer::class => function () use ($formEngine,$csrfManager) {
return new FormRenderer($formEngine,$csrfManager);
},
)));
$formFactory = Forms::createFormFactoryBuilder()
->addExtension(new HttpFoundationExtension())
->addExtension(new CsrfExtension($csrfManager))
->addExtension(new ValidatorExtension($validator))
->getFormFactory();
$form = $formFactory->createBuilder(FormType::class, null, array(
'action' => 'index.php',
'method' => 'POST'
))
->add('username',TextType::class,array(
'constraints' => array( new NotBlank())
))
->add('password',TextType::class,array(
'constraints' => array( new NotBlank())
))
->add('remember',CheckboxType::class)
->getForm();
$request = Request::createFromGlobals();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
var_dump($data);
die();
}
echo $twig->render('login.html.twig', array(
'form' => $form->createView()
));
细枝模板:
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../../../favicon.ico">
<title>Test</title>
<!-- Bootstrap core CSS -->
<link href="app/template/asset/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="app/template/asset/css/signin.css" rel="stylesheet">
</head>
<body class="text-center">
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" />
{{ form_end(form) }}
</body>
</html>
试验
{{form_start(form)}}
{{form_widget(form)}
{{form_end(form)}}
你能帮我吗
谢谢。我想你忘了将过滤器添加到新环境中:
$getTextdomain = new \Twig_SimpleFilter('trans',function ($string){
return $this->container->get('translator')->trans($string);
});
$twig->addFilter($getTextdomain);
只要阅读错误,您就可以知道到底是什么错误: 致命错误:在/symfony/Twig bridge/Resources/views/Form/bootstrap\u 4\u layout.html中出现未捕获的异常“Twig\u error\u Syntax”,消息为“未知的“trans”筛选器”。Twig:158堆栈跟踪 这意味着文件
bootstrap_4_layout.html.twig
-实际上来自symfony-twig-bridge-具有类似于{string{trans…}}
的内容,这主要用于多种语言,由于您遇到此错误,这意味着您的trans过滤器未启用,您需要启用它
在同一个教程中,你会看到:
翻译
如果您正在使用与其中一个
默认的表单主题文件(例如form_div_layout.html.twig)有2个
用于翻译的细枝过滤器(trans和transChoice)
表单标签、错误、选项文本和其他字符串
所以,只要按照下面的步骤去做,你的问题就会得到解决
composer需要symfony/translation symfony/config
- 接下来,将TranslationExtension添加到您的Twig_环境实例中
我通过添加$twig->addExtension(新的TranslationExtension($translator))解决了这个问题;这意味着您添加了翻译扩展,但我刚才解释了更多原因,因为您将多次遇到此错误,现在您知道它的含义;)