nos audaremos de el sgt comando de consola:
php app/console doctrine:generate:form AppBundle:Employee --no-interaction
esto generará el archivo appBundle/Form/EmployeeForm.php
al archivo generado le vamos a tocar la parte para que se pueda mostrar el conjunto de roles como checkboxes
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class EmployeeType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name')->add('address')->add('dni')->add(
'rolesCollection', 'entity',
[
'class' => 'AppBundle\Entity\Role',
'property' => 'name',
'multiple' => TRUE,
'expanded' => TRUE,
'label' => 'Roles',
]
);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Employee'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_employee';
}
}
si expanded es False, los roles se mostrarán en un combobox
las validaciones se definen en los atributos de la entidad
en configureOptions...el array con la key data_class define la relacion con la entidad.
ahora ya podemos crear el action en el controller para llamar al template que contendrá el formulario,
en este mismo action vamos a manejar el submit que se hará desde el formulario.
el formulario no tiene un action definido por lo que el evento submit llamará al mismo action.
/**
* @Route("/new-employee")
*/
public function newemployeeAction(Request $request)
{
$form = $this->createForm(EmployeeType::class);
// only handles data on POST
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//dump($form->getData());die;
$employee = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($employee);
$em->flush();
$this->addFlash('success', 'Empleado creado!');
return $this->redirectToRoute('admin_employee_list');
}
return $this->render('admin/employee/new.html.twig', [
'employeeForm' => $form->createView()
]);
}
crear
en app/Resources/views/admin/empolyee/new.htm.twig
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-xs-12">
<h1>Nuevo Empleado</h1>
{{ form_start(employeeForm) }}
{{ form_widget(employeeForm) }}
<button type="submit" class="btn btn-primary">Guardar</button>
{{ form_end(employeeForm) }}
</div>
</div>
</div>
{% endblock %}
para mostrar el mensaje flash, editamos el archivo base.html.twig
....
<body>
{% for msg in app.session.flashBag.get('success') %}
<div class="alert alert-success">
{{ msg }}
</div>
{% endfor %}
....
para que el formulario tenga un mejor aspecto vamos a habilitar bootstrap en config.yml
twig:
form:
resources: ['bootstrap_3_horizontal_layout.html.twig']
No hay comentarios:
Publicar un comentario