3
votes

Laravel - Page Modifier et mettre à jour

J'utilise Laravel et j'essaie de créer une page d'édition et d'appeler ma méthode de mise à jour lors de la soumission, le problème est que j'obtiens un 404 lors de la mise à jour. Ceci est mon fichier lame à éditer comme ceci:

public function edit($id)
    {
        $data = PdTprofession::find($id);
        return view('professions-edit', compact('data'));
    }

public function update(Request $request, $id)
    {
        $data = PdTprofession::find($id);
        return view('professions-edit', compact('data'));
    }

Voici mes routes:

Route::get('/admin/professions-edit/{id}', 'v1\ProfessionsController@edit');
Route::put('/admin/professions-update/{id}', 'v1\ProfessionsController@update');

Et voici les méthodes appelées:

@extends('adminlte::page')

@section('title', 'AdminLTE')

@section('content_header')
    <h1>Professions</h1>
@stop

@section('content')
    <form method="PUT" action="/admin/professions-update/{{ $data->pkprofession }}">
        <div class="form-group">
            <label for="profession_name">Profession Name</label>
            <input type="text" name="profession_name" id="profession_name" class="form-control" value="{{$data->profession_name}}" />
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-success">Update</button>
        </div>
    </form>
@stop

Pourquoi est-ce que j'obtiens une erreur 404 et comment puis-je la corriger?

Merci,


2 commentaires

N'utilisez pas method = PUT Utilisez method = post et ajoutez @method ('PUT') dans votre formulaire, et n'oubliez pas le jeton csrf


Essayez avec

@ csrf @method ("PUT")


3 Réponses :


5
votes

Dans les documents laravel, les formulaires HTML ne sont pas compatibles PUT, PATCH ou DELETE Actions. Ainsi, lors de la définition des routes PUT, PATCH ou DELETE qui sont appelées à partir d'un formulaire HTML, vous devrez ajouter un champ _method masqué au forme. La valeur envoyée avec le champ _method sera utilisée comme HTTP méthode de demande:

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>

Vous pouvez utiliser la directive @method Blade pour générer l'entrée _method:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

3 commentaires

Merci, surtout pour la partie _token.


Vous êtes le bienvenu! Si cette réponse ou toute autre a résolu votre problème, veuillez la marquer comme acceptée.


Cette réponse a été acceptée, a dû attendre quelques minutes



1
votes

Il vous manque le jeton csrf et l'entrée method . Essayez ceci:

$data->update($request->all());

De plus, dans votre méthode update , vous oubliez de mettre à jour l'objet, ajoutez ceci à votre code:

@extends('adminlte::page')

@section('title', 'AdminLTE')

@section('content_header')
    <h1>Professions</h1>
@stop

@section('content')
    <form method="POST" action="/admin/professions-update/{{ $data->pkprofession }}">
        @csrf
        @method('PUT')
        <div class="form-group">
            <label for="profession_name">Profession Name</label>
            <input type="text" name="profession_name" id="profession_name" class="form-control" value="{{$data->profession_name}}" />
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-success">Update</button>
        </div>
    </form>
@stop


0 commentaires

3
votes

Il y a tellement de problèmes dans votre code que nous allons les résoudre un par un:

<form action="{{ url('/admin/professions-update/' . $data->pkprofession) }}" method="POST">
    @method('PUT')
    @csrf  // this is required when you are using the method other then 'get'
    other elements
</form>

changez-le en:

action="{{ url('/admin/professions-update/' . $data->pkprofession) }}">

puis HTML Les formulaires ne prennent pas en charge les actions PUT, PATCH ou DELETE, alors modifiez-le en:

action="/admin/professions-update/{{ $data->pkprofession }}">


0 commentaires