Besoin d'aide ?

The PATCH method is not supported for this route. Supported methods: GET, HEAD, POST.

Avatar de AlexandreCarignan
AlexandreCarignan

Bonjour,

j'ai ce message lorsque je tente de mettre à jour les informations d'un personnage.

voici la route:

Route::namespace('Character')->prefix('character')->name('character.')->group(function() {
    Route::resource('user', 'CharacterController');
});

voici le contrôleur:

public function update(Request $request)
    {
        

        $character = $request-all();
        $character = Character::find($id);
        $character->update($request->all());        

        return redirect()->route('profile.user.index');

    }

voici le fichier Edit.blade.php

<div class="container pt-4">

                                <form action="{{ route('character.user.update', $character->id) }}" method="POST" class="btn-group">
                                    {{ method_field('PATCH') }}
                                    {{ csrf_field() }}
                                    <button type="submit" class="btn btn-primary"><i class="fa fa-btn fa-sign-in"></i>Sauvegarder</button>
                                </form>

                            </div>



                            <div class="container pt-4">
                                <form action="{{ route('character.user.destroy', $character->id) }}" method="POST" class="d-inline">
                                    @csrf
                                    @method('DELETE')
                                    <button type="submit" class="btn btn-danger"><i class="fa fa-btn fa-sign-in"></i>Supprimer</button>
                                </form>
                            </div>
                    </form>

Note, chaque character est relier à un utilisateur par un user_id.

J'utilise ceci pour le store lors de la création:

public function store(Request $request)
    {
    
        $data = $request->all();
        $data['user_id'] = Auth::user()->id;
        Character::create($data);


        return view('profile.user.index');
    }

Est-ce que je dois utiliser cette recette?

Avatar de AlexandreCarignan
AlexandreCarignan

Problème résolu,

Ajustement du code de début du form:

avant:

<div class="card-body">
                    <form class="form-floating" action="{{ route('character.user.store') }}" method="POST">

                        @csrf

Maintenant:

<div class="card-body">
                    <form class="form-floating" action="{{ route('character.user.update', $character->id) }}" method="POST">

                        @csrf

et ajustement du controler:

avant:

public function update(Request $request,$id)
    {
        /*if (Gate::denies('edit-users')) {
            return redirect()->route('login');
        }*/

        $character = $request-all();
        $character = Character::find($id);
        $character->update($request->all());


        return redirect()->route('profile.user.index');

    }

maintenant:

public function update(Request $request,$id)
    {
        /*if (Gate::denies('edit-users')) {
            return redirect()->route('login');
        }*/

        $character = $request->all();
        $character = Character::find($id);
        $character->update($request->all());


        return redirect()->route('profile.user.index');

    }
Avatar de Seeryos
Seeryos

J'ajoute juste une petite chose que j'ai remarqué en faisant des API :

Parfois les routes PATCH et PUT appelée via l'appli mobile ne fonctionne pas et retournent une erreur du type "The PATCH method is not supported for this route." juste parce que lors de l'appel à la route vous avez mis un '/' à la fin alors qu'il n'y en a pas dans la définition de la route.

Si ça peut aider quelqu'un car j'ai mis une bonne quinzaine de minutes à percuter !

Vous ne pouvez pas répondre à ce sujet.