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

Parametrización de la clase formulario: $options

Estas en el tema de Parametrización de la clase formulario: $options en el foro de Symfony en Foros del Web. Buenas. Leyendo la documentación de [URL="http://symfony.com/doc/current/book/forms.html"]formularios de symfony2[/URL] en la sección de "Creating Form Classes" muestra un ejemplo sencillo de cómo encapsular la creación de ...
  #1 (permalink)  
Antiguo 23/10/2013, 04:55
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 5 meses
Puntos: 32
Parametrización de la clase formulario: $options

Buenas.

Leyendo la documentación de [URL="http://symfony.com/doc/current/book/forms.html"]formularios de symfony2[/URL] en la sección de "Creating Form Classes" muestra un ejemplo sencillo de cómo encapsular la creación de un formulario dentro de una clase.

Código PHP:
class TaskType extends AbstractType
{
    public function 
buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder->add('task')
            ->
add('dueDate'null, array('widget' => 'single_text'))
            ->
add('save''submit');
    }
    ...

El problema es que no menciona para que puede servir el parametro $options de la clase buildForm. De manera que me es dificil suponer como debo manejar el parámetro $options del método buildForm()

El problema es que yo quiero crear una clase en que uno de los campos dependa de una consulta en la base de datos:
Código PHP:
// src/Brondem/AdminBundle/Form/Type/SectionType.php
namespace BrondemAdminBundleFormType;
 
use 
SymfonyComponentFormAbstractType;
use 
SymfonyComponentFormFormBuilderInterface;

class 
SectionType extends AbstractType
{
    public function 
buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder
            
->add('host''choice', array( 'choices' => $options['vars']['hosts'] ))
            
// ...etc
    
}

    
// ...etc

Código PHP:
namespace BrondemAdminBundleController;

use 
SymfonyBundleFrameworkBundleControllerController;
use 
BrondemAdminBundleEntityFormsSection;
use 
BrondemAdminBundleFormTypeSectionType;

class 
SliceManagerController extends Controller
{
    function 
selectSectionActionRequest $request )
    {
        
        
// consulta a la base de datos
        // ...
        // creacion del array $select_hosts en funcion de la consulta
        // ...
        // creación del parametro $options
        
$options = array( 
            
'vars' => array(
                
'hosts' => $select_hosts,
                ),
        );
        
$form $this->createForm(new SectionType(), new Section(), $options );
        
        
// ...etc
    
}
    
// ...etc

Sin embargo me envia este error:
Código PHP:
Ver original
  1. The option "vars" does not exist. Known options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual"
  2. 500 Internal Server Error - InvalidOptionsException

Entonces, me gustaría donde encontrar información del parámetro $options. Y, en todo caso, me gustaría saber como parametrizar la clase formulario para hacerla reutilizable.

Un saludo y gracias!
  #2 (permalink)  
Antiguo 23/10/2013, 06:11
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Parametrización de la clase formulario: $options

Supongo que el "culpable" sera el OptionsResolver relacionado, intenta agregar vars al setDefaultOptions de tu AbstractType

Código PHP:
Ver original
  1. class SectionType extends AbstractType
  2. {
  3.     public function setDefaultOptions(OptionsResolverInterface $resolver)
  4.     {
  5.         $resolver->setDefaults(array(
  6.             'vars' => array()
  7.         ));
  8.     }
  9. }

De todas formas para crear un select db dependiente puedes utilizar entity field type

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 25/10/2013, 02:43
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 5 meses
Puntos: 32
Respuesta: Parametrización de la clase formulario: $options

Muchas gracias masterpuppet. Se agradece tener un apoyo ante dudas que me van surgiendo a medida que voy estudiando este framework.

No me acordaba de que hice esta publicación y al final encontré la solución por mi mismo a base de mucho picar piedra. Por cierto, me he mirado rápidamente lo de entity field type y creo que cosas un poco más complicadas como esto ya no lo podría hacer, ¿no?

Código PHP:
// buscar en la base de datos cada host y el numero de urls asociadas a éste
        
$query $em->createQuery(
           
'SELECT count(u.id) as num, h.name as name
            FROM BrondemAdminBundle:Url u JOIN u.host h
            GROUP BY u.host
            ORDER BY num DESC'
        
);

        
$hosts $query->getResult();
// creacion del array $select_hosts en funcion de la consulta 
        
$select_hosts = array();

        foreach( 
$hosts as $host )
            
$select_hosts[] = $host['name'] . " (" $host['num'] . ")";
// creacion del parametro options
        
$options = array( 
            
'vars' => array(
                
'hosts' => $select_hosts,
                ),
        );
//creacion del formulario ... 
Un saludo.

Etiquetas: clase, 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 10:31.