problème de route laravel

Par longh, il y a 2 ans


Bonjour,
J'essaie de suivre le tuto sur laravel 10.
j'ai une erreur dans la vue

J'ai récupéré le code source de Grafikart. Je ne vois pas ce qui cloche

<a href="{{ route('admin.property.edit', $property) }}" class="btn btn-primary">Editer</a>

Ce que j'obtiens

Missing required parameter for [Route: admin.property.edit] [URI: admin/property/{property}/edit] [Missing parameter: property].

quand je mets l'id en dur ça marche par exemple :

<a href="{{ route('admin.property.edit', 2) }}" class="btn btn-primary">Editer</a>

Merci de votre aide

10 réponses

popotte, il y a 2 ans

Hello :)

Alors plusieurs choses:

  • Dans web.php, tu as bien mis {property} à la fin de l'url?
  • Tu as bien un model Property et une migration properties?
  • Dans ton controller, ta fonction edit, en paramètre tu a bien typé le paramètre en Property? Dans ce genre: public function edit (Property $property)

Et sinon tu peux montrer le code de web.php, Property.php et la fonction edit de ton controller?

longh, il y a 2 ans

Bonjour,
un grand merci pour ton aide
voici ma route dans web.php ::

Route::prefix('admin')->name('admin.')->group(function () { Route::resource('property', \App\Http\Controllers\Admin\PropertyController::class)->except(['show']); });

résultat de artisan route concerant property:

GET|HEAD admin/property ................................................................. admin.property.index › Admin\PropertyController@index POST admin/property ................................................................. admin.property.store › Admin\PropertyController@store GET|HEAD admin/property/create ........................................................ admin.property.create › Admin\PropertyController@create PUT|PATCH admin/property/{property} .................................................... admin.property.update › Admin\PropertyController@update DELETE admin/property/{property} .................................................. admin.property.destroy › Admin\PropertyController@destroy GET|HEAD admin/property/{property}/edit ................................................... admin.property.edit › Admin\PropertyController@edit

J'ai bien un model Property et j'ai ma migration properties. J'ai déjà des enregistrements dans la table

Voici mon fichier Property.php:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Property extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'surface', 'rooms', 'bedrooms', 'floor', 'price', 'city', 'address', 'postal_code', 'sold', ]; }

mon edit du controller :

public function edit(Property $property) { return view('admin.properties.form', [ 'property' => $property ]); }

J'ai vraiment suivi à la lettre en essayant de bien comprendre le tuto.
merci bcp.

popotte, il y a 2 ans

De rien ^^

Mmmh bizarre ça m'a l'air bon :/

Essaye de voir si ça ça fonctionne: <a href="{{ route('admin.property.edit', ['property' => $property]) }}" class="btn btn-primary">Editer</a>

Ah petite parenthèse, faut éviter d'utiliser la propriété $fillable, niveau sécurité c'est mieux d'utiliser Eloquent :p

longh, il y a 2 ans

Merci,
j'avais déjà essayé avec ['property' => $property]), sans succès là non plus. J'ai la même erreur
($fillable) : merci je vais regarder Eloquent :)

popotte, il y a 2 ans

Ah mais je viens de voir, te manque le name dans la route

Route::prefix('admin')->name('admin.')->group(function () { Route::resource('property', \App\Http\Controllers\Admin\PropertyController::class)->except(['show'])->name('property.edit'); });
longh, il y a 2 ans

Normalement Route::resource génère toutes les routes et les name aussi non ?

popotte, il y a 2 ans

Mmmh je n'ai jamais utilisé resource ^^'

Pour ta solution, dans names, tu as mis admin.property.edit ou property.edit? (vus que tu as ajouté admin dans un préfixe faut pas le mettre)

longh, il y a 2 ans

J'ai trouvé mon erreur. je suis confus.
En ajoutant les champs que je souhaitais et avant de faire la migration pour créer la table, j'ai malencontreusement effacé le $table->id();.

.... Schema::create('properties', function (Blueprint $table) { $table->id(); ....

Du coup il ne pouvait pas pointer vers l'élément comme il faut. (J'ai besoin de vacances...)

Pour répondre à ta question j'ai changé la route pour tester en mettant :

Route::prefix('admin')->name('admin.')->group(function () { Route::resource('property', \App\Http\Controllers\Admin\PropertyController::class)->except(['show'])->names([ 'edit' => 'property.edition' ]); });

Et la ligne dans la vue ressemble à ça du coup :

<a href="{{ route('admin.property.edition', $property) }}" class="btn btn-primary">Editer</a>

Merci de ton aide et je suis désolé de t'avoir pris de ton temps. Par contre échanger avec toi m'a mis sur la piste. Merci encore j'ai appris plein de trucs aujourd'hui.

popotte, il y a 2 ans

Ahah ah oui sans id c'est sur qu'il aurait eu du mal à trouver xD

Pas de soucis et avec plaisir ;)