政策不存在的 Laravel Gate 资源
Posted
技术标签:
【中文标题】政策不存在的 Laravel Gate 资源【英文标题】:Laravel Gate resource with policy not existing 【发布时间】:2017-05-24 12:38:40 【问题描述】:我正在尝试在我的项目中实施策略,并且我有一个自定义方法 askFriend
,我想将其添加到我的 UserRelationPolicy
。
所以我在我的 UserRelationPolicy 中实现了 askFriend 方法,但是当我尝试从 UserRelationPolicy@askFriend
调用它时,我问自己如何从这个方法调用它。
类似于$this->authorize('askFriend', $friend);
但它不起作用,完全忽略它。所以我在文档中进一步搜索,发现我可以使用 Gate 方法将UserRelationPolicy
中的特定方法绑定到这样的资源名称:
Gate::resource('userrelation', 'UserRelationPolicy', [
'userrelation.askfriendrelation' => 'askFriendRelation'
]);
你可以在这里找到代表:Documentation Writing Gate
当我尝试执行此代码时,我收到以下错误:
Call to undefined method Illuminate\Auth\Access\Gate::resource()
仅此而已。 Resource 方法似乎根本不存在。经过多次搜索,尝试在标题中包含每个Gate
。尝试静态或使用实例调用它。没有任何效果,而且方法也无处可寻……
是不是忘记了什么?如何从策略类中的控制器调用自定义方法?
【问题讨论】:
【参考方案1】:您确定您使用的是 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
所以我认为我在正确的版本,但我没有找到方法...
检查 Illuminate\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,问题就解决了。抓住机会。以上是关于政策不存在的 Laravel Gate 资源的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 修复请求的资源上不存在“Access-Control-Allow-Origin”标头
我的网页的一项功能已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头