Problème CRUD user

Par Aidawebdevelopper, il y a 3 ans


"Je peut ajouter des users par fixtures mais il m'est impossible d'en ajouter à partir de la liste des users apres CRUD.
Merci d'avance.
J'ai vraiment besoin de votre aide."

Ce que je veux

Je souhaite ajouter ou modifier un user dans l'interface utilisateur.J

Ce que j'obtiens

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion"). :(moi qui voulait ajouter ou modifier un user dans l'interface utilisateur

10 réponses

gillesr, il y a 3 ans

Essaie de remplacer :

return $this->renderForm('user/new.html.twig', [ 'user' => $user, 'form' => $form, ]);

par

return $this->render('user/new.html.twig', [ 'user' => $user, 'form' => $form, ]);
gillesr, il y a 3 ans

Bonjour,

il va nous falloir plus de détails pour t'aider. Avec quoi fait tu ton CRUD ?
Tu as une exception qui est envoyée donc il faut partir du message d'erreur, montre nous le code de la partie de ton template qui pose problème et celui du controleur qui lui envoie les données.

Aidawebdevelopper, il y a 3 ans

Salut gillesr,
voici le code:
UserController:"
/**

  • @Route("/new", name="user_new", methods={"GET","POST"})
    */
    public function new(Request $request): Response
    {
    $user = new User();
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($user);
        $entityManager->flush();
    
        return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER);
    }
    
    return $this->renderForm('user/new.html.twig', [
        'user' => $user,
        'form' => $form,
    ]);

    }

    /**

  • @Route("/{id}", name="user_show", methods={"GET"})
    */
    public function show(User $user): Response
    {
    return $this->render('user/show.html.twig', [
    'user' => $user,
    ]);
    }

    /**

  • @Route("/{id}/edit", name="user_edit", methods={"GET","POST"})
    */
    public function edit(Request $request, User $user): Response
    {
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $this->getDoctrine()->getManager()->flush();
    
        return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER);
    }
    
    return $this->renderForm('user/edit.html.twig', [
        'user' => $user,
        'form' => $form,
    ]);

    }
    "

new.twig:
"
{% extends 'base.html.twig' %}

{% block title %}New User{% endblock %}

{% block body %}
<h1>Create new User</h1>

{{ include('user/_form.html.twig') }}

<a href="{{ path('user_index') }}">back to list</a>

{% endblock %}

"
edit.twig:

"
{% extends 'base.html.twig' %}

{% block title %}Edit User{% endblock %}

{% block body %}
<h1>Edit User</h1>

{{ include('user/_form.html.twig', {'button_label': 'Update'}) }}

<a href="{{ path('user_index') }}">back to list</a>

{{ include('user/_delete_form.html.twig') }}

{% endblock %}
"

form:
"
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

"

<?php

namespace App\Form;

use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
->add('roles')
->add('password')
;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => User::class,
    ]);
}

}

gillesr, il y a 3 ans

UserController :

/** @Route("/new", name="user_new", methods={"GET","POST"}) */ public function new(Request $request): Response { $user = new User(); $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($user); $entityManager->flush(); return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER); } return $this->renderForm('user/new.html.twig', [ 'user' => $user, 'form' => $form, ]); } /** @Route("/{id}", name="user_show", methods={"GET"}) */ public function show(User $user): Response { return $this->render('user/show.html.twig', [ 'user' => $user, ]); } /** @Route("/{id}/edit", name="user_edit", methods={"GET","POST"}) */ public function edit(Request $request, User $user): Response { $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $this->getDoctrine()->getManager()->flush(); return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER); } return $this->renderForm('user/edit.html.twig', [ 'user' => $user, 'form' => $form, ]); }

new.twig:

{% extends 'base.html.twig' %} {% block title %}New User{% endblock %} {% block body %} <h1>Create new User</h1> {{ include('user/_form.html.twig') }} <a href="{{ path('user_index') }}">back to list</a> {% endblock %}

edit.twig:

{% extends 'base.html.twig' %} {% block title %}Edit User{% endblock %} {% block body %} <h1>Edit User</h1> {{ include('user/_form.html.twig', {'button_label': 'Update'}) }} <a href="{{ path('user_index') }}">back to list</a> {{ include('user/_delete_form.html.twig') }} {% endblock %}

form:

{{ form_start(form) }} {{ form_widget(form) }} <button class="btn">{{ button_label|default('Save') }}</button> {{ form_end(form) }} <?php namespace App\Form; use App\Entity\User; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class UserType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('email') ->add('roles') ->add('password'); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => User::class, ]); } }
gillesr, il y a 3 ans

J'ai fais un petit peu de ménage dans l'affichage pour qu'on voit ton code correctement.
question subsidiaire : sur quelle route obtiens tu le message d'erreur ?

Aidawebdevelopper, il y a 3 ans

par erreur j'ai marqué comme résolu mais tel n'est pas le cas.
Pour ta question c'est dans user/new quand je veux ajouter un nouveau utilisateur ou l'éditer j'obtiens cette erreur:
"An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") "

Aidawebdevelopper, il y a 3 ans

Merci gillesr mais ça ne règle toujours pas mon problème.
Mais quand j'enlève " {{ include('user/_form.html.twig') }} " dans le new.twig pas d'erreur mais rien ne s'affiche à par le h1.
Donc je pense c'est dans _form.html.twig

gillesr, il y a 3 ans

Bonjour,
essaie ça :

return $this->renderForm('user/new.html.twig', [ 'user' => $user, 'form' => $form->createView(), ]);
Marsh Neal, il y a 3 ans

J'ai eu exactement le même problème, et pour être honnête, je ne sais toujours pas comment le résoudre. C'est très étrange pour moi, car j'ai même pu installer un système ajax récemment, bien que je n'aie jamais rien fait de tel auparavant, et maintenant je n'arrive pas à trouver un bug dans le code, bien que je travaille dessus depuis longtemps.

Vhorn, il y a 3 ans

Salut,
C'est parce que "roles" est un array dans ton entité User. Essaye avec :

$builder ->add('roles', ChoiceType::class, [ 'choices' => [ 'ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_USER' => 'ROLE_USER', ], ]);