【发布时间】:2017-11-12 13:56:31
【问题描述】:
我使用了下面的代码,它也有 csrf。但是我怎样才能禁用它的csrf呢?我搜索了 Disable CSRF token on login form 并没有帮助,因为在下面的案例中没有使用 createFormBuilder(),所以我该怎么办?
$csrfStorage = new NativeSessionTokenStorage();
$csrfGenerator = new UriSafeTokenGenerator();
$csrfManager = new CsrfTokenManager($csrfGenerator, $csrfStorage);
$formFactory = Forms::createFormFactoryBuilder()
->addExtension(new CsrfExtension($csrfManager))
->getFormFactory();
$defaultFormTheme = 'bootstrap_3_layout.html.twig';
$vendorDir = realpath(__DIR__.'/../vendor');
$appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable');
$vendorTwigBridgeDir = dirname($appVariableReflection->getFileName());
$viewsDir = realpath('twig');
$twig = new Twig_Environment(new Twig_Loader_Filesystem(array(
$viewsDir,
$vendorTwigBridgeDir.'/Resources/views/Form',
)));
$formEngine = new TwigRendererEngine(array($defaultFormTheme), $twig);
$twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array(
TwigRenderer::class => function () use ($formEngine, $csrfManager) {
return new TwigRenderer($formEngine, $csrfManager);
},
)));
$twig->addExtension(new FormExtension());
$translator = new Translator('en');
$twig->addExtension(new TranslationExtension($translator));
$form = $formFactory->createBuilder()
->add('task', TextType::class)
->add('dueDate', DateType::class)
->getForm();
$request = Request::createFromGlobals();
$form->handleRequest();
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
print_r($data);
}
$twig->display('new.html.twig', array(
'form' => $form->createView(),
));
【问题讨论】:
-
将您的构建器部分更新为
createBuilder('', null, ['csrf_protection' => false]) -
我收到错误 0:无法加载类型“”。我猜是因为第一个参数不能为空?我应该传入什么?
-
你应该传递 FormType,你自己创建的表单类型。
-
如果你想为所有东西禁用 csrf,然后将 config.yml 框架 csrf_protection 设置为 false。但是我真的不明白,如果你不想要 csrf 保护,你为什么要添加 csrf 管理器。