Nuevas pantallas de administrador: creación de usuarios
En la clase anterior vimos cómo armar el mecanismo para la creación de empresas y notamos que un punto necesario era la asociación de usuarios a esas empresas.
Es momento de dotar al administrador de la posibilidad de crear dichos usuarios.
Para ahorrarnos algo de trabajo usemos algo más de la magia de Symfony:
php bin/console make:crud
Con este simple comando generaremos:
Un nuevo tipo de formulario
Un nuevo controlador
Una serie de templates para las operaciones básicas (Create, Read, Update, Delete).
Una vez finalizada su ejecución, si te diriges a [http://homestead.test/user](http://homestead.test/user) te encontrarás con algo similar a:
No es muy vistoso, es cierto, pero es funcional.
Lo primero que notarás es que se está mostrando la contraseña (encriptada, claro)... algo que no debería suceder.
Abre el archivo templates/user/index.html y elimina las líneas que hacen referencia a esta propiedad.
Al recargar la página te encontrarás con:
El tema de que está en inglés es fácil de solucionar, ¿cierto?
Pasemos a lo importante: ¿funciona la creación de un nuevo usuario?
Nada grave realmente, solo se trata de un pequeño problema de conversión: fíjate que los roles del usuario son un string, pero no cualquier string: son un string json.
Dirígete un momento al archivo templates/user/new.html.
No hay demasiado ahí dentro, ¿cierto? Es un poco de decoración para un:
{{include('user/_form.html.twig')}}
Con lo cual, la respuesta debe estar en el archivo templates/user/_form.html.
Este template tampoco aporta demasiado… se limita a hacer un render del form.
¿Y entonces? ¿Dónde está el problema?
Vayamos a ver el métodoUserController::newque es el que genera esta pantalla.
Ahí puedes ver que se está utilizando el formulario App\Form\UserType.
Nada sospechoso, ¿cierto?
El problema surge de la configuración por defecto del widget utilizado para mostrar este arreglo ($roles) como un campo de selección no-múltiple, cuando, al menos en teoría, un usuario podría tener más de un rol asignado.
La forma de corregirlo es tocar ligeramente la configuración del formulario: