Laravel 5.1调用未定义的方法Illuminate \ Auth \ Access \ Gate :: allow()

时间:2016-03-10 19:51:04

标签: php laravel authorization

当我实现这个时(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)

所以我想与您分享这些知识,但如果您找到解决方案,而不升级框架版本,我会很高兴知道。

谢谢!

1 个答案:

答案 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