策略不存在的Laravel门资源
我试图在我的项目中实现策略,我有一个自定义方法策略不存在的Laravel门资源,laravel,resources,Laravel,Resources,我试图在我的项目中实现策略,我有一个自定义方法askFriend,我想将它添加到我的UserRelationPolicy 因此,我在UserRelationPolicy中实现了askFriend方法,但在尝试从UserRelationPolicy@askFriend我问自己如何从这个方法调用它 类似于$this->authorize('askFriend',$friend')但它不起作用,有点忽略它。因此,我在文档中进一步搜索,发现我可以使用Gate方法将UserRelationPolicy中的
askFriend
,我想将它添加到我的UserRelationPolicy
因此,我在UserRelationPolicy中实现了askFriend方法,但在尝试从UserRelationPolicy@askFriend
我问自己如何从这个方法调用它
类似于$this->authorize('askFriend',$friend')代码>但它不起作用,有点忽略它。因此,我在文档中进一步搜索,发现我可以使用Gate方法将UserRelationPolicy
中的特定方法绑定到如下资源名称:
Gate::resource('userrelation', 'UserRelationPolicy', [
'userrelation.askfriendrelation' => 'askFriendRelation'
]);
您可以在此处找到表示:
当我尝试执行此代码时,会出现以下错误:
Call to undefined method Illuminate\Auth\Access\Gate::resource()
没别的了。资源方法似乎根本不存在。在多次搜索之后,尝试在标题中包含每个门。尝试静态调用它或使用实例调用它。什么都不管用,方法也远未找到
这是被遗忘的东西吗?如何从策略类中的控制器调用自定义方法?您确定要使用5.4吗?方法Gate::resource仅在5.4中实现。
如果要使用任何版本,则必须使用Gate::define
在App\Providers\AuthServiceProvider
中设置门功能,如下所示:
Gate::define('userrelation.askfriendrelation', 'UserRelationPolicy@askFriend');
命令php artisan-v
给出了以下结果Laravel Framework 5.4.18
,因此我认为我的版本是正确的,但我没有找到方法…检查illighte\Auth\Access\Gate.php中的Gate类,并与此进行比较:https://github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/Access/Gate.php
。如果代码中有任何差异,您应该仔细检查composer.json并运行composer update
。我今天遇到了相同的错误,我运行了compose update
,更新到5.4.24,问题得到了解决。试试看。