Hola:
Estoy solucionando los deprecation errors de Symfony y me he encontrado con varios que no se solucionar:
Passing type instances to FormBuilder::add(), Form::add() or the FormFactory is deprecated since version 2.8 and will not be supported in 3.0. Use the fully-qualified type class name instead (DeusExCorp\BackendBundle\Form\Type\MenusType). The Symfony\Bridge\Twig\Extension\FormExtension class implements Twig_Extension_InitRuntimeInterface that is deprecated to be removed in 3.0
El primero, creo que tiene que ver con la manera con la que llamo a mis formularios. La cuestión es que yo llamo a los míos como servicios. ¿Este error me afecta? Si es así ¿Cómo puedo solucionarlo?
Con respecto al segundo, estoy bastante atascado y no se por dónde tirar.
Un saludo.
Respuestas
El primer error está seguramente relacionado con el cambio que más odio de Symfony 2.8. Lo explican en el documento UPGRADE-2.8.md. Antes se definía el tipo de los campos del formulario con una cadena de texto. Ejemplo:
$form = $this->createFormBuilder() ->add('name', 'text') ->add('age', 'integer') ->getForm();
Ahora tienes que pasar la clase del campo de formulario (la clase entera, incluyendo todo el "namespace"). Si utilizas PHP 5.5 o superior, estás de suerte porque puedes usar esto:
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();
Si no, tendrás que hacer esto otro, que es bastante horrible:
$form = $this->createFormBuilder() ->add('name', 'Symfony\Component\Form\Extension\Core\Type\TextType') ->add('age', 'Symfony\Component\Form\Extension\Core\Type\IntegerType') ->getForm();
Por otra parte, el segundo error es algo interno de Symfony, por lo que no vas a poder tocarlo. Según el mensaje de error, el culpable es la extensión FormExtension
de Twig que proporciona el propio Symfony. En cualquier caso, el error está relacionado con los cambios que se explican en esta sección de la documentación de Twig.
@javiereguiluz
Hola:
Lo del primer cambio lo estuve leyendo, la cuestión es que tengo los formularios configurados con todos los campos de esa manera y me sigue dando ese error.
@TsubasaAkai
En ese caso, el problema viene seguramente de algún bundle de terceros y no de tu propio código. Tienes dos opciones para ver todos los detalles:
- Usando el profiler de Symfony, pulsa en el panel de logs y en la pestaña Deprecations. Ahí en cada error puedes desplegar el stack trace para ver exactamente qué código originó ese error.
- En los tests de tu aplicación, puedes usar el PHPUnit Bridge de Symfony para mostrar de nuevo el stack trace de cada error de tipo deprecation. En estas slides de una presentación que hice hace poco se explica cómo.
@javiereguiluz
También tienes que pasar la clase del formulario personalizado en el controlador, de esta manera $form = $this->createForm(TaskType::class, $task);
@alejobit