symfony-forms - createform - symfony using form
Cómo cambiar el valor del campo de formulario en Symfony 2 (4)
Otra forma de establecer el valor es usar las opciones de formulario:
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add(''tags'',''text'',array(
''required'' => false,
''attr'' => array(''name'' => ''tags''),
''mapped'' => false,
''data'' => $options[''tags_value''],
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
''data_class'' => ''MyBundle/ItemBundle/Entity/Item'',
''cascade_validation'' => true,
''tags_value'' => ''default value if you want'',
));
}
Y luego en el controlador:
public function editAction(Request $request, $id) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository(''MyBundleItemBundle:Item'')->find($id);
$form = $this->createForm(new ItemType(), $entity, [''tags_value'' => ''test text'']);
}
Tengo un formulario como el siguiente:
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add(''tags'',''text'',array(
''required'' => false,
''attr'' => array(''name'' => ''tags''),
''mapped'' => false))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
''data_class'' => ''MyBundle/ItemBundle/Entity/Item'',
''cascade_validation'' => true,
));
}
}
Mi acción de edición
public function editAction(Request $request, $id) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository(''MyBundleItemBundle:Item'')->find($id);
$form = $this->createForm(new ItemType(), $entity);
//$form->get(''tags'')->setValue(''test text'');
// ^- this is what i would like to do -^
// ...
}
Mientras edito un elemento, ¿Cómo puedo cambiar el valor del campo de formulario dentro del controlador antes de representarlo?
Puede cambiar el valor de las etiquetas en el controlador:
$request = $this->get(''request'');
if ($request->getMethod() == ''POST'')
{
$form->bind($request);
if $form->isValid())
{
$entity->setTags(''test'');
//persist ...
}
}
Puedes usar setData()
para configurar datos en campos de formulario en Symfony, como esto:
$form = $formBuilder->getForm();
$form->get(''firstname'')->setData(''John'');
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
...
->add(''tags'',''text'',array(
''required'' => false,
''attr'' => array(''name'' => ''tags'',''value''=>''newvalue''),
''mapped'' => false))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
''data_class'' => ''MyBundle/ItemBundle/Entity/Item'',
''cascade_validation'' => true,
));
}
}