当我实现这个时(https://mattstauffer.co/blog/acl-access-control-list-authorization-in-laravel-5-1) 授权laravel 5.1教程,我发现了这个
的用法if (Gate::allows('create-contact')) {
redirect('hooray');
}
然后框架向我显示了这个错误
Call to undefined method Illuminate\Auth\Access\Gate::allow()
依赖项一切正常,所以这不是问题,然后我发现laravel从5.1.11开始实现这个方法 在laravel的授权文档中的这个主题(laraveldocs / 5.1 /授权) 所以laravel团队在他们的文档页面中说这个授权功能从版本5.1.11开始就可用。
我得到了同样的错误,所以我去了github上的laravel / framework存储库(github / laravel / framework /) 并从版本5.1.11到5.1.31进行检查,发现源代码中不存在该方法。
从第5.2版开始,该门方法可用
你可以在这里查看v5.1(github / laravel / framework / blob / v5.1.31 / src / Illuminate / Contracts / Auth / Access / Gate.php)和v5.2(github / laravel) /framework/blob/v5.2.0/src/Illuminate/Contracts/Auth/Access/Gate.php)
所以我想与您分享这些知识,但如果您找到解决方案,而不升级框架版本,我会很高兴知道。
谢谢!
答案 0 :(得分:0)
我认为这只是代码中输入错误的结果。该方法称为 (Post
.select(Post, fn.COUNT(Tag.id))
.join(Tag, JOIN.LEFT_OUTER)
.where(Tag.name == 'BadTag')
.group_by(Post)
.having(fn.COUNT(Tag.id) == 0))
,但您的错误报告 allows
(如allow
的单数形式):
allows
您引用的Illuminate\Contracts\Auth\Access\Gate
接口只是Call to undefined method Illuminate\Auth\Access\Gate::allow()
// This should be "allows" ^^^^^
类必须实现的合同,只是因为它不需要Gate
方法这并不意味着它没有实施。它实际上是由Illuminate\Auth\Access\Gate
实现的,它是实际的implementation that is bound to that contract。