Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Duda solucionando los Deprecation Errors de Symfony

17 de diciembre de 2015

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

#1

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

17 diciembre 2015, 16:11
#2

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

17 diciembre 2015, 23:30
#3

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:

  1. 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.
  2. 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

18 diciembre 2015, 8:24
#4

También tienes que pasar la clase del formulario personalizado en el controlador, de esta manera $form = $this->createForm(TaskType::class, $task);

Referencia

@alejobit

23 diciembre 2015, 2:47