Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Campos de formulario opcionales

Estas en el tema de Campos de formulario opcionales en el foro de Symfony en Foros del Web. Hola, necesito que un formulario que tengo: Código: $form = $this->createFormBuilder($ad) ->add('name', 'text') ->add('lastname', 'text') ->add('email', 'email') ->add('telephone') ->add('category') ->add('city', 'text') ->add('title', 'text') ->add('description', 'textarea') ...
  #1 (permalink)  
Antiguo 28/06/2013, 20:52
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 1 mes
Puntos: 1
Campos de formulario opcionales

Hola, necesito que un formulario que tengo:
Código:
    $form = $this->createFormBuilder($ad)
            ->add('name', 'text')
            ->add('lastname', 'text')
            ->add('email', 'email')
            ->add('telephone')
            ->add('category')
            ->add('city', 'text')
            ->add('title', 'text')
            ->add('description', 'textarea')
            ->add('type')
            ->add('price', 'text')
            ->add('attachment', 'file')
            ->getForm();
Sean opcionales algunos campos. En el modelo tengo (pondre solo la aprte más relevante de cara al formulario, no todo el código por la extensión del mismo):
Código:
/**
 * @ORM\Entity
 * @ORM\Table(name="adsite")
 * @ORM\HasLifecycleCallbacks()
 */
class Adsite
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM\ManyToMany(targetEntity="Adcategory")
     * @ORM\JoinTable(name="ad_category",
     *     joinColumns={@ORM\JoinColumn(name="ad_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
     * )
     */
    protected $category;
    /**
     * @ORM\ManyToOne(targetEntity="Username")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $username;
    /**
     * @ORM\Column(type="string")
     */
    protected $name;
    /**
     * @ORM\Column(type="string")
     */
    protected $lastname;
    /**
     * @ORM\Column(type="string")
     */
    protected $title;
    /**
     * @ORM\ManyToOne(targetEntity="Adsitetype")
     * @ORM\JoinColumn(name="type_id", referencedColumnName="id")
     */
    protected $type;
    /**
     * @ORM\Column(type="text")
     */
    protected $description;
    /**
     * @ORM\Column(type="decimal", scale=2)
     */
    protected $price;
    /**
     * @ORM\Column(type="string")
     */
    protected $email;
    /**
     * @ORM\Column(type="string")
     */
    protected $telephone;
    /**
     * @ORM\Column(type="string")
     */
    protected $city;
    /**/
    protected $attachment;
Hace unas semanas necesite esto mismo con solo uno de los campos y recuerdo que buscando por google vi una opción con la que se suponia que así no era obligatorio rellenar ese campo pero el HTML generado por Symfony seguia teniendo require en el campo, en ese momento no me importo que no me funcionara como no era importante en aquel momento, pero ahora que lo necesito para practicamente todos los campos del formulario necesito saber alguna forma de hacerlo, y que funcione. He estado mirando por google pero no me queda del todo claro como puedo hacerlo.

De paso, si sabeis de algun manual, tutorial, libro, para seguir aprendiendo Symfony (he empezado con symfony hace poco, menos de un mes, o mes y pico) lo agradeceria (con manual o libro me refiero a alguno distinto de la documentacion propia de Symfony, que me ha servido y ayudado pero no me es del todo clara o en algunos aspecto no profundiza tanto como me gustaria).
__________________
JHG
  #2 (permalink)  
Antiguo 28/06/2013, 22:00
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Campos de formulario opcionales

Te dejo la referencia a la documentación http://symfony.com/doc/current/book/...d-type-options y ten en cuenta que también deberías ajustar el mapeo para los campos que son opcionales ya que por defecto el nullable esta a false.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 29/06/2013, 09:13
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Campos de formulario opcionales

Cita:
Iniciado por masterpuppet Ver Mensaje
Te dejo la referencia a la documentación http://symfony.com/doc/current/book/...d-type-options y ten en cuenta que también deberías ajustar el mapeo para los campos que son opcionales ya que por defecto el nullable esta a false.
Un poco fea la costumbre ya generalizada por muchos de cualquier cosa copiar y pegar un enlace a una documentación y quedarse tan anchos, eso lo entenderia si yo viniera sin haber buscado anteriormente, pero como explique (si es que se me lee completo y no solo als dos primeras lineas) ya me tengo mirada la documentación oficial de Symfony, e incluso no me aprece del todo clara y también pedia de apso si alguien podia recomendarme manuales o libros mejores. Pero bueno, concretamente dije que ya mirando por google encontre una forma en que supuestamente no generaba el HTML con el require pero que lo probe y aun así seguía generandolo exactamente igual. Pues me remito a lo dicho, en la documentación que me has enlazado (que ya yo la habia visto) lo que yo entiendo es que con poner:
Código:
            ->add('telephone', array('required' => false))
Ya no deberia haber un require en el HTML, pues lo sigue habiendo. ¿Alguna idea que si funcione?
__________________
JHG

Última edición por jhg; 29/06/2013 a las 09:50
  #4 (permalink)  
Antiguo 29/06/2013, 09:51
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Campos de formulario opcionales

Intentaste como sugiere la doc ?

Código PHP:
Ver original
  1. ->add('phone', null, array('required' => false))

Sobre tu comentario, a mi honestamente lo que me parece feo es tu actitud cuando uno simplemente intentar dar una mano.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 29/06/2013, 10:47
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Campos de formulario opcionales

Todos los intentos probados:
Código:
->add('telephone', array('required' => false))
Código:
->add('telephone', null, array('required' => false))
Código:
->add('telephone', 'text', array('required' => false))
Resultado obtenido en todos los intentos:
Código:
<input type="text" id="form_telephone" name="form[telephone]" required="required">
Y una pequeña comparación de la documentación oficial.
Así explican el label:
Código:
The label option
The label for the form field can be set using the label option, which can be applied to any field:
->add('dueDate', 'date', array(
    'widget' => 'single_text',
    'label'  => 'Due Date',
))
The label for a field can also be set in the template rendering the form, see below.
Con código de ejemplo. Ahora bien, la de required:
Código:
The most common option is the required option, which can be applied to any field. By default, the required option is set to true, meaning that HTML5-ready browsers will apply client-side validation if the field is left blank. If you don't want this behavior, either set the required option on your field to false or disable HTML5 validation.
Also note that setting the required option to true will not result in server-side validation to be applied. In other words, if a user submits a blank value for the field (either with an old browser or web service, for example), it will be accepted as a valid value unless you use Symfony's NotBlank or NotNull validation constraint.
In other words, the required option is "nice", but true server-side validation should always be used.
Sin código de ejemplo y como ves he probado y no me funciona. He eliminado la cache por si fuera por la cache, pero sigue manteniendome el odioso required en esos campos.

Y mi actitud no la veo fea cuando he mantenido la educación, feo es que vengo explicando que he leido la documentación y no me queda claro y lo estoy intentando y no me funciona y la solución que se te ocurre es volverme a mandar a la documentación de la cual venia, es como ir al medico diciendo que te recetaron x pastilla para el dolor de cabeza y que no te funciona ¡y tenga la magnifica idea de recetarte la misma pastilla! Una frase de Einstein decia "Si buscas resultados distintos, no hagas siempre lo mismo" ¿Si leyendo la documentación digo que no me aclara, que incluso agradeceria que me recomendaran otro libro y otros manuales mejroes que lo expliquen mejor, y digo que he probado lo de la documentación y no me funciona, crees sinceramente que llegar poner en google "required symfony" y hacerme un copia y pega de un enlace es ayuga alguna? ¡No, obviamente! que llegue uno y escriba solo "¿como puedo quitar el required?" entiendo que se le deje el enlace, proque daria a pensar que ni conoce la documentación oficial, pero es que yo precisamente dije que ya habia pasado por la documentación oficial, lo minimo es no tratarme de tonto porque tambien yo se buscar en la documentación oficial formularios y mirar lo del required, que encima lo he dicho que mirando la documentación oficial que la busque en google no me funciono.
__________________
JHG
  #6 (permalink)  
Antiguo 29/06/2013, 11:23
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Campos de formulario opcionales

Forma de verlo, suerte con el problema.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 30/06/2013, 12:52
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Campos de formulario opcionales

Solucionado, el constructor de formulario no controlaba el require, habia que junto a la modificación en el constructor del formulario modificar también su renderizado en la plantilla de forma condicional. (La verdad que Symfony es más enrevesado en lo que a la base de datos y formularios se refiere en comparación con Django que es más sencillo y potente).

http://j.gs/2TTv


Cita:
Iniciado por masterpuppet Ver Mensaje
Forma de verlo, suerte con el problema.
Que la distancia más corta entre dos puntos es la recta, que x=x, y esto, poco lugar a formas de verlo dan.

Ejemplos:

Una persona llama a los bomberos
- Hola bomberos, mi casa se esta quemando
- Apaguelo
- ¿de verdad? ¡que buena idea! y yo que pensaba dejarlo encendido hasta que se quemase todo

Una persona va al medico
- Doctor tomando paracetamol me sigue doliendo la cabeza
- Le recetare paracetamol entonces apra el dolor de cabeza
- ¡Es un genio! y yo que no se me habia ocurrido tomar paracetamol, a no, espera, ¡si es justo lo que estaba tomando y no me funciona! ¿y cuanto le debo por la consulta?
- 200 euros
- ¿y cuando vuelvo?
- Cuando tenga otros 200 euros

Una persona hablando con un mecanico
- El motor hace un ruido raro y despues de un rato se ahoga y se apra
- Creo que eso va a ser cosa del motor, deberias llevarlo a un mecanico
- ¡Que listo! y yo que venia a preguntarte a ti que eras mecanico para luego llevarlo a un carpintero

Una persona llamando a un vidente del tarot
- Hola queria hacerle una consulta
- De que se trata? Amor, dinero, salud?
- Amor
- Aquie te veo problemas de amor
- No que va... si llamaba porque me va genial...

Una persona consultando una duda en un foro
- He leido x documentación de y cosa y no me esta funcionando, tengo z código
- Te dejo el enlace x a documentación de y
- ¡Que util! es justo lo que habia leido
- Prueba z codigo
- Que bien, es justo el que probe y no funcionaba, ¡Que util!

__________________
JHG
  #8 (permalink)  
Antiguo 30/08/2013, 12:05
Avatar de Delek  
Fecha de Ingreso: marzo-2005
Ubicación: Madrid
Mensajes: 75
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Campos de formulario opcionales

Sin ánimo de "trolear", estaba buscando una solución parecida para dos widgetsFormChoice pero de forma dinámica, no he podido resistirme a responder ya que masterpuppet identifica el problema y se toma la molestia de remitir a un # de una url, que quizás nos sea para todos conocida, pero que pasemos por alto.

Solo agradecer a Masterpuppet por el detalle y su tiempo para remitir este mapeado de una extensa explicación, leyendo la documentación he aclarado muchas dudas, gracias por la molestia y el tiempo por publicar el link, Maspuppet.

Y naturalmente quisiera mantener en la ignorancia a cierto tipo de persona.

Etiquetas: campos, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:13.