【问题标题】:Laravel 5.1 Call to undefined method Illuminate\Auth\Access\Gate::allow()Laravel 5.1 调用未定义的方法 Illuminate\Auth\Access\Gate::allow()
【发布时间】:2016-06-25 20:30:51
【问题描述】:

当我实现了这个 (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/authorization)的这个主题中 所以 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)

所以我想和你分享这方面的知识,但是如果你找到了解决方案,而无需升级框架的版本,我会很高兴知道。

谢谢!

【问题讨论】:

标签: php laravel authorization


【解决方案1】:

我认为这只是代码中的拼写错误的结果。该方法名为allows,但您的错误报告为allow(如allows的单数形式):

Call to undefined method Illuminate\Auth\Access\Gate::allow()
//                            This should be "allows" ^^^^^

你引用的Illuminate\Contracts\Auth\Access\Gate 接口只是Gate类必须实现的契约,只是因为它不需要allows方法,但这并不意味着它未实施。其实是Illuminate\Auth\Access\Gate实现的,也就是实际的implementation that is bound to that contract

【讨论】:

  • 谢谢你,但它是故意想也许它是在一个单一的方式。
  • 我觉得我不太明白。你的意思是你希望它被命名为allow(单数)?并且使用正确的allows(复数)并不能解决问题?
  • 我假设你的 Laravel 版本是 > 5.1.11,所以请确认allows 方法是否可以在vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php 文件中找到。如果它不存在,那么您的包有问题,您应该删除vendor 目录并再次运行composer install 以确保正确获取包。如果方法在那里,那么请发布负责抛出异常的代码。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 2015-12-17
  • 2015-08-24
  • 2020-07-06
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多