Fix routes shallow releves : Source ne peut pas être bindée sans {source} dans l'URL

Avec ->shallow(), show/edit/update/destroy deviennent /releves/{releve}.
Le contrôleur bindait Source $source depuis la route (introuvable) →
Laravel l'instanciait vide via DI → id null → route() échouait dans la vue.
Correction : charger $source via $releve->source dans les 4 actions shallow.
Redirect update() corrigé : releves.show (shallow) et non sources.releves.show.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 19:29:49 +02:00
parent fe96bbdf6e
commit d38efaad60
+9 -7
View File
@@ -49,27 +49,28 @@ class ReleveController extends Controller
->with('success', 'Relevé ajouté.'); ->with('success', 'Relevé ajouté.');
} }
public function show(Source $source, Releve $releve): View public function show(Releve $releve): View
{ {
$this->authorize('view', $releve); $this->authorize('view', $releve);
$source->load('sourceType.fields'); $source = $releve->source->load('sourceType.fields');
$releve->load('createur', 'modificateur'); $releve->load('createur', 'modificateur');
return view('releves.show', compact('source', 'releve')); return view('releves.show', compact('source', 'releve'));
} }
public function edit(Source $source, Releve $releve): View public function edit(Releve $releve): View
{ {
$this->authorize('update', $releve); $this->authorize('update', $releve);
$source->load('sourceType.fields'); $source = $releve->source->load('sourceType.fields');
return view('releves.edit', compact('source', 'releve')); return view('releves.edit', compact('source', 'releve'));
} }
public function update(UpdateReleveRequest $request, Source $source, Releve $releve): RedirectResponse public function update(UpdateReleveRequest $request, Releve $releve): RedirectResponse
{ {
$source = $releve->source->load('sourceType.fields');
$data = $this->buildData($request->validated()['data'] ?? [], $source); $data = $this->buildData($request->validated()['data'] ?? [], $source);
$releve->update([ $releve->update([
@@ -77,14 +78,15 @@ class ReleveController extends Controller
'updated_by' => $request->user()->id, 'updated_by' => $request->user()->id,
]); ]);
return redirect()->route('sources.releves.show', [$source, $releve]) return redirect()->route('releves.show', $releve)
->with('success', 'Relevé mis à jour.'); ->with('success', 'Relevé mis à jour.');
} }
public function destroy(Source $source, Releve $releve): RedirectResponse public function destroy(Releve $releve): RedirectResponse
{ {
$this->authorize('delete', $releve); $this->authorize('delete', $releve);
$source = $releve->source;
$releve->delete(); $releve->delete();
return redirect()->route('sources.releves.index', $source) return redirect()->route('sources.releves.index', $source)