je construis une application mobile parlant à mon application symfony2 via des webservices je ne trouve pas un moyen de désactiver la protection csrf sur un contrôleur/action spécifique
je souhaite publier des données d'enregistrement pour cette action et utiliser la validation de formulaire sf2. Je n'appelle pas le formulaire dans mon application mobile
Impossible de modifier les paramètres du conteneur en action, lève une exception car il s'agit d'un paramètre figé ...
Je ne souhaite pas désactiver la protection des formulaires pour l'ensemble de mon application
un indice?
merci !
mise à jour: avec symfony 2.1.x
/**
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
Si vous cherchez une solution un peu plus simple et plus rapide que celle suggérée dans la réponse ci-dessus, voici comment:
<?php
// ...
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MyType extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
}
.. ou si vous utilisez des versions plus anciennes (Symfony 2.0. *):
<?php
// ...
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class MyType extends AbstractType
{
// ....
public function getDefaultOptions(array $options)
{
$options = parent::getDefaultOptions($options);
$options['csrf_protection'] = false;
return $options;
}
}
Consultez la documentation Symfony pour plus d'informations.
Edit: réponse mise à jour vers la dernière version de Symfony, merci naitsirch
Pour ceux qui souhaitent créer un formulaire simple dans un contrôleur:
$form = $this->container->get('form.factory')
->createNamedBuilder(null, 'form', null, array('csrf_protection' => false))
->add('yourField','text', array(
'label' => false,
'mapped' => false
))
->getForm();
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => false,
]);
}
use Symfony\Component\Form\Extension\Core\Type\FormType;
$form = $this->container->get('form.factory')
->createNamedBuilder(null, FormType::class, null, array('csrf_protection' => false))
->add('yourField','text', array(
'label' => false,
'mapped' => false
))
->getForm();
Adapté de la réponse de Mick