Mise à jour des formulaires vers SF3.0
Le composant "Form" entre Symfony 2 et Symfony 3 : https://github.com/symfony/symfony/blob/3.0/UPGRADE-3.0.md#form
Nouvelle manière d'appeler le type de formulaire
D'une string, on passe au nom des classes.
Avant :
$form = $this->createFormBuilder()
->add('name', 'text')
->add('age', 'integer')
->getForm();
Après:
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('age', IntegerType::class)
->getForm();
Le même changement (renvoyer un nom de classe plutôt qu'une string) doit apparaitre dans la fonction getParent
.
Autre méthodes et signatures
Il y a aussi plusieurs méthodes et signatures qui évoluent.
La plus utilisée me semble celle-ci :
The configureOptions() method was added to the FormTypeInterface in replacement of the setDefaultOptions() method which has been removed.
et aussi ceci :
if ('POST' === $request->getMethod()) {
$form->bind($request);
if ($form->isValid()) {
// ...
}
}
qui devient
$form->handleRequest($request);
if ($form->isSubmitted()) {
// ...
if ($form->isValid()) {
// ...
}
}
inversion des clés / valeurs dans les ChoiceType
Message de deprecation :
The value "false" for the "choices_as_values" option of the "choice" form type (Symfony\Component\Form\Extension\Core\Type\ChoiceType) is deprecated since version 2.8 and will not be supported anymore in 3.0. Set this option to "true" and flip the contents of the "choices"
Il faut, pour ceux-là, inverser les clés et les valeurs (les clés deviennent les valeurs, et vice-versa). Puis mettre choices_as_values à true
tant qu'on reste dans symfony 2.8.
TODO
-
Passer en revue tous les formulaires, notamment dans ./Form et ./FormType la manière d'appeler les formulaires ; -
revoir les noms et signatures des méthodes, en particulier setDefaultOptions => configureOptions -
revoir les formulaires dans les controleurs
Pour le faire, on peut s'aider des tests en activant les messages de deprecation (supprimer la ligne <env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
dans phpunit.xml.dist.
.
Mais la plupart des formulaires sont repris dans d'autres bundles. Par exemple, Select2Country
se retrouve dans le menu personne, etc. Pour cette raison, je pense qu'il faudrait travailler dans une branche "upgrade-sf3", dans chaque bundle, et basculer des projets sur ces branches globalement.