2017-09-03 1 views
0

J'apprends laravel et j'ai l'erreur suivante J'aimerais savoir si quelqu'un pourrait m'aider à le résoudre. J'ai un modèle appelé User et un appel contrôlé UserController, j'essaie d'utiliser la liaison de modèle pour créer le modifier, mettre à jour et détruire. Dans la fonction d'édition, j'ai le code suivant.Laravel 5.5 liaison de modèle de formulaire Utilisateur

public function edit(User $user) 
    {  
     dd($user); 
    } 

Cette fonction retourne:

User {#191 ▼ 
    #fillable: array:3 [▶] 
    #dates: array:1 [▶] 
    #hidden: array:2 [▶] 
    #connection: null 
    #table: null 
    #primaryKey: "id" 
    #keyType: "int" 
    +incrementing: true 
    #with: [] 
    #withCount: [] 
    #perPage: 15 
    +exists: false 
    +wasRecentlyCreated: false 
    #attributes: [] 
    #original: [] 
    #changes: [] 
    #casts: [] 
    #dateFormat: null 
    #appends: [] 
    #dispatchesEvents: [] 
    #observables: [] 
    #relations: [] 
    #touches: [] 
    +timestamps: true 
    #visible: [] 
    #guarded: array:1 [▶] 
    #rememberTokenName: "remember_token" 
    #forceDeleting: false 
} 

Si je supprime le modèle utilisateur

public function edit($user) 
{ 

    dd($user); 

} 

Renvoie l'ID de l'utilisateur en cours d'édition dans ce cas/usuario/24/modifier

"24" 

Les routes sont de claré comme suit

Route::resource('/usuario','UsuarioController'); 

Je voudrais savoir si quelqu'un sait comment résoudre ce problème puisque la fonction doit se référer au modèle de l'utilisateur et plus tard à la variable utilisateur $, si quelqu'un sait comment le résoudre ou si je Je fais quelque chose de mal ce serait d'une grande aide

+0

Je ne suis pas sûr quel est le problème ici? Si vous tapez 'User', Laravel essayera de l'injecter et retournera l'instance du modèle. "24" est l'identifiant de l'enregistrement. Vous pouvez obtenir Model à partir d'ID comme ceci 'User :: find (24);' et ID from Model comme ceci '$ user-> id'. Qu'essayez-vous d'accomplir et qu'est-ce qui ne fonctionne pas? – Giedrius

Répondre

2

Ce que vous signalez ici ne pose aucun problème. C'est le comportement souhaité du framework Laravel.

Si vous tapez allusion le modèle que vous avez fait sur votre premier exemple, Laravel sera sous le capot essayer de le faire:

$user = User::findOrFail($user) 

Mais quand vous ne tapez pas allusion, Laravel ne sais pas quel modèle devrait être chargé avec cet ID, donc il passera juste le id cet utilisateur a donné des paramètres de demande.

Changer votre code pour ressembler à ceci:

// At the top of your controller add a use statement 
use App\User; 

class UserController extends Controller 
{ 
    //     ▼ This is the typehint 
    //       ▼ The parameter name should be the same resource name used on route 
    public function edit(User $usuario) 
    { 
     dd($usuario); 
    } 
} 
+0

Il ne suffit pas de taper hint, la variable * nom * doit être le même * nom * du paramètre. Sinon, vous obtiendrez un objet Utilisateur vide comme le premier dd ($ user) posté par le répondeur. – dparoli

+0

@dparoli c'est vrai. J'ai mis à jour la réponse. Merci. –

1

Pour le modèle de liaison pour travailler dans l'action du contrôleur, vous devez utiliser un nom de variable qui correspondent à la paramenter que vous utilisez dans votre déclaration de route, essayez comme suit: Comme dans votre route, vous avez déclaré que vous utilisiez "usuario" comme paramètre la recherche de liaison de modèle pour une variable du même nom.

Vous pouvez vérifier le nom de paramètre avec php artisan route:list

Il est également écrit dans les Laravel docs, le modèle de liaison:

Laravel résout automatiquement les modèles Eloquent définis dans les routes ou actions de contrôleur dont Type- insinué variables noms correspondre à un itinéraire secteur nom