Array to string conversion

119 views
Skip to first unread message

Ana H. Pérez

unread,
Jun 6, 2020, 8:59:37 AM6/6/20
to symfo...@googlegroups.com
Hola,
Estoy usando symfony 5. Tengo un error al tratar de guardar con un select del formbuilder los roles de una aplicación. Los roles son un array y se queja de la conversión que hace el formulario para ese tipo....

Lo ideal sería que lo pillara con su tipo de dato adecuado (no lo he conseguido) o añadir un field auxiliar (no he encontrado forma de añadirlo, property_path que parece que era la manera de hacerlo está deprecated) para después en el controlador hacer un switch y guardar el rol adecuado... No cabe la posibilidad de guardar el rol como string porque se puede dar el caso de que un usuario tenga varios roles.

¿Alguna ayuda?

tengo esto en la entidad de usuario:
/**
* @ORM\Column(type="json")
*/
private $roles = [];
/**
* @see UserInterface
*/
public function getRoles(): array
{
return $this->roles;
}

public function setRoles(array $roles): self
{
$this->roles = $roles;

return $this;
}
tengo esto en el formbuilder

->add('roles', ChoiceType::class, [
'label' => 'kind_of_user',
'attr' => [
'class'=>'form-control myselect'
],
'choices' => [
'Admin' => 'ROLE_ADMIN',
'Operador' => 'ROLE_OP',
'Trabajador' => 'ROLE_USER'
],

])

Manuel Aguirre

unread,
Jun 6, 2020, 12:01:52 PM6/6/20
to symfony-es
Buen día, Ana!

El problema allí es que en tu modelo los roles son un arreglo de datos (múltiples valores). Mientras que en el formulario, tienes configurado el campo de los roles como un select simple (un solo valor seleccionable).


Lo que debes hacer es colocar la opcion "multiple" => true, en el campo roles para que así queden modelo y formulario alineados. Debe quedar algo como esto:

->add('roles', ChoiceType::class, [
     
'label' => 'kind_of_user',
     
'attr' => [
         
'class'=>'form-control myselect'
     
],
     
'choices' => [
         
'Admin' => 'ROLE_ADMIN',
         
'Operador' => 'ROLE_OP',
         
'Trabajador' => 'ROLE_USER'
     
],

     
'multiple' => true, // esta es la nueva opcion de quedeb de configurar.
]);

Saludos!

Martin Ibarra Cervantes

unread,
Oct 6, 2022, 11:58:52 PM10/6/22
to symfo...@googlegroups.com
Puede leer un poco de DataTranformer convertir de Array a String y String a Array con eso puedes solucionarlo

Saludos.


--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/symfony-es/c0c7b9a7-07f1-449b-b363-17b5d9d6c96bo%40googlegroups.com.

Saúl Hernández Arellano

unread,
Nov 22, 2022, 4:06:47 PM11/22/22
to symfony-es
El detalle es que la propiedad $roles  es un array y tu le estas pasando un string, lo puedes solucionar fácilmente agregándole la opción multiple a true


->add('roles', ChoiceType::class, [
              'label' => 'kind_of_user',
              'attr' => [
                      'class'=>'form-control myselect'
              ],
             'choices' => [
                     'Admin' => 'ROLE_ADMIN',
                     'Operador' => 'ROLE_OP',
                     'Trabajador' => 'ROLE_USER'
             ],
            'multiple' => true
])


Saludos
Reply all
Reply to author
Forward
0 new messages