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 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 selectSectionAction( Request $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
}
Código PHP:
Ver original
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" 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!