繁体   English   中英

我应该将什么传递给 symfony 的 handleRequest class?

[英]What should I pass to handleRequest class of symfony?

我正在使用这个 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();

它可以工作,但是当然表单验证不起作用。 如何解决? 我应该将什么传递给它的构造函数? II 不想使用它的 isSubmitted() if 子句,也不需要验证它,我只想使用 output 的形式,它工作正常。 当我想使用 HTTFoundation 使用 isSubmitted if 子句时出现问题。 我应该怎么办?

Form 组件使用请求处理程序( symfony 文档)来处理handleRequest()方法中的请求。 从链接的文档中:

要处理表单数据,您需要调用handleRequest()方法:

 $form->handleRequest();

在幕后,这使用NativeRequestHandler object 从正确的 PHP 超全局变量(即$_POST$_GET )中读取数据,基于表单上配置的 HTTP 方法(默认)。

如果您想使用来自 HttpFoundation 的Request object,您可能需要为我们配置HttpFoundationRequestHandler的 Form 组件。 在这种情况下,您必须将$request参数传递给handleRequest()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM