2017-05-24 2 views
0

J'essaie d'implémenter des politiques dans mon projet et j'ai une méthode personnalisée askFriend que je veux ajouter à mon UserRelationPolicy.Laravel Gate ressource avec la politique non existante

J'ai donc implémenté dans ma UserRelationPolicy la méthode askFriend mais en essayant de l'appeler depuis le [email protected] je me suis demandé comment l'appeler à partir de cette méthode.

Quelque chose comme $this->authorize('askFriend', $friend); mais il ne fonctionnait pas, sorte de l'ignorer du tout. Donc, je fouillèrent dans la documentation et trouvé que je pouvais lier avec une méthode porte la méthode spécifique dans le UserRelationPolicy à un nom de ressource comme ceci:

Gate::resource('userrelation', 'UserRelationPolicy', [ 
    'userrelation.askfriendrelation' => 'askFriendRelation' 
]); 

Vous pouvez trouver la représentation ici: Documentation Writing Gate

Lorsque J'essaye d'exécuter ce code j'obtiens l'erreur suivante:

Call to undefined method Illuminate\Auth\Access\Gate::resource() 

Et rien de plus. La méthode Resource ne semble pas exister du tout. Après de nombreuses recherches, essayez d'inclure tous les Gate dans l'en-tête. Essayer de l'appeler de manière statique ou avec une instance. Rien ne fonctionne et la méthode est loin d'être trouvée ...

Est-ce quelque chose qui est oublié? Comment puis-je appeler une méthode personnalisée à partir d'un contrôleur dans une classe de stratégie?

Répondre

0

Etes-vous sûr d'utiliser le format 5.4? La méthode Gate :: resource a été implémentée seulement en 5.4. Si vous utilisez une version derrière vous devrez utiliser le Gate::define.

Définissez les capacités porte dans le App\Providers\AuthServiceProvider comme celui-ci:

Gate::define('userrelation.askfriendrelation', '[email protected]'); 
+0

La commande 'artisan php -v' me donne le résultat suivant' Laravel cadre 5.4.18' Je pense que je suis à la bonne version mais je ne trouve pas la méthode ... – dib258

+0

Vérifiez la classe Gate à 'Illuminate \ Auth \ Access \ Gate.php' et comparez à celle-ci:' https://github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/Accès/Gate.php'. S'il y a une différence dans le code, vous devriez vérifier votre composer.json et lancer 'la mise à jour du compositeur'. –

+0

J'ai eu la même erreur aujourd'hui, j'ai couru 'composer update', mis à jour en 5.4.24 et le problème a été résolu. Tente ta chance. –