Subir archivo CSV en Symfony 3

Hola con este simple código hacía que Symfony me cree un simple formulario para subir un archivo:

$form = $this->createFormBuilder()->add('submitFile', 'file', array('label' => 'File to Submit'))->getForm();

Ahora en Symfony3 me dice: Could not load type "file". Vueltas y mas vueltas por la ayuda de Symfony más Google no le encuentro la vuelta ...

Respuestas

#1

Hola @xub,

Me parece mucho que en Symfony 3 debes colocar algo como esto,

->add('file', FileType::class, array('label' => 'File to Submit',))

No se si ese sea el problema,

#2

La respuesta correcta es la que te ha dado @miguelplazasr. En el archivo [UPGRADE to 3.0]() tienes todos los detalles sobre los cambios necesarios. En la sección Form puedes leer lo siguiente:


Type names were removed. Instead of referencing types by name, you must reference them by their fully-qualified class name (FQCN) instead:

Before:

$form = $this->createFormBuilder()
   ->add('name', 'text')
   ->add('age', 'integer')
   ->getForm();

After:

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();
#3

y probaron este código que están poniendo aca ???

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();

así da error de sintaxis es como que pide comillas en TextType::class

Si lo pongo así

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();

Could not load type "TextType::class"

#4

@xub la constante ::class solo funciona si usas PHP 5.5 o superior. Si no, tendrás que escribir el código así (es bastante feo y aburrido, pero no hay otra alternativa posible):

$form = $this->createFormBuilder()
   ->add('name', 'Symfony\Component\Form\Extension\Core\Type\TextType')
   ->add('age', 'Symfony\Component\Form\Extension\Core\Type\IntegerType')
   ->getForm();
#5

Es muy raro tengo Debian 8 y 5.6.17-0+deb8u1 debería funcionar ...

Creo que empiezo a entender porque los desarrolladores están migrando a Laravel jaja 3 días para tratar de entender lo que esta gente pensó como formidable para modificar los formularios y no funciona ni para atrás ni para adelante

#6

En tu anterior mensaje decías que cuando usas este estilo:

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();

Te da un error de sintaxis. Como la parte TextType::class parece que está bien, ¿puede ser que haya algún pequeño error de sintaxis en otra parte? ¿Puedes mostrarnos algo más de información sobre el error?

#7

No lo tomaba el Netbeans tenía seteado PHP 5.3 en el proyecto ahora lo toma bien

<form action="" method="post" {{ form_enctype(form) }}>

Lo tuve que cambiar a:

{{ form_start(form) }}

ahora me tira error en

Attempted to call an undefined method named "bind" of class "Symfony\Component\Form\Form".

A seguir buscando.

Cuando me fui de Codeigniter vi como mejor opción Symfony, en varios foros vi mucha gente quejarse y decir que siempre cambiaban la forma de armar los formularios en todos los saltos de versiones y esto generaba mucho rechazo desde el lado de los desarrolladores, se ve que en esta versión 3 vuelven con lo mismo... la verdad que me gusta mas Symfony que Laravel, no se porque se estan pasando a Laravel mucha gente... sera por estos detalles ??? Saludos

#8

A pesar de los cambios, una cosa buena que tiene Symfony es que siempre documenta todo. Por ejemplo el cambio del método bind() está explicado aquí, por lo que no tienes que buscar en Google:


The methods Form::bind() and Form::isBound() were removed. You should use Form::submit() and Form::isSubmitted() instead.

Before:

$form->bind(array(...));

After:

$form->submit(array(...));

El resto de cambios de los formularios los puedes consultar en: https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md#form

#9

si si ya lo había encontrado en la pagina

Gracias

a seguir con la 3.0 creo que ya quedo todo el proyecto en orden

Saludos

#10

@xub si te vas a Laravel, seguirás usando Symfony :v...