【发布时间】:2019-10-13 15:44:24
【问题描述】:
我正在使用这个 twig 和独立的 symfony 表单和验证器组件:
use Symfony\Component\Validator\Constraints as Assert;
// other use lines ommitted to shorten the code.
$defaultFormTheme = 'bootstrap_4_horizontal_layout.html.twig';
$csrfGenerator = new UriSafeTokenGenerator();
$csrfStorage = new NativeSessionTokenStorage();
$csrfManager = new CsrfTokenManager($csrfGenerator, $csrfStorage);
$formEngine = new TwigRendererEngine([$defaultFormTheme], $twig);
$twig->addRuntimeLoader(new FactoryRuntimeLoader([
FormRenderer::class => function () use ($formEngine, $csrfManager) {
return new FormRenderer($formEngine, $csrfManager);
},
]));
$twig->addExtension(new FormExtension());
$translator = new Translator('fr_FR');
$translator->addLoader('php', new \Symfony\Component\Translation\Loader\PhpFileLoader());
$translator->addResource('php', ROOT.'/translations/messages.fr.php', 'fr_FR');
$twig->addExtension(new TranslationExtension($translator));
$validator = Validation::createValidator();
$formFactory = Forms::createFormFactoryBuilder()
->addExtension(new CsrfExtension($csrfManager))
->addExtension(new ValidatorExtension($validator))
->getFormFactory();
$form = $formFactory->createBuilder(FormType::class, null, ['csrf_protection' => false])
->add('firstnameEn', TextType::class, [
'constraints' => [new Assert\Length(['min' => 3])]
])
->add('lastnameEn', TextType::class)
->add('email', EmailType::class)
->add('birthDate', TextType::class)
->add('password', PasswordType::class)
->add('applyCard', CheckboxType::class)
->add('showPhoto', CheckboxType::class)
->add('privacyRead', CheckboxType::class)
->getForm();
$request = Request::createFromGlobals();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$errors = $form->getErrors();
var_dump($errors);
$data = $form->getErrors();
var_dump($data);
print("debug pring");
} else {
$errors = $form->getErrors();
var_dump($errors);
$data = $form->getErrors();
var_dump($data);
print("debug pring");
}
echo $twig->render('signup.html',
['form' => $form->createView(),
'title' => 'title',
]);
我来了
Expected argument of type "null", "Symfony\Component\HttpFoundation\Request" given
那是因为
$form->handleRequest($request);
为什么会出现此错误以及如何解决?当我只使用时
$form->handleRequest();
它可以工作,但当然表单验证不起作用。如何解决?我应该将什么传递给它的构造函数?我不想使用它的 isSubmitted() if 子句,也不需要验证它,我只想用它来输出它工作正常的表单。当我想使用 HTTFoundation 使用 isSubmitted if 子句时出现问题。我该怎么办?
【问题讨论】: