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,
3 Réponses :
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>
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
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
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 }}">
N'utilisez pas method = PUT Utilisez method = post et ajoutez @method ('PUT') dans votre formulaire, et n'oubliez pas le jeton csrf
Essayez avec