请问注册授权策略时,Gate::guessPolicyNamesUsing 引起的报错解决及分析:求大佬指点

namespace App\Providers;
.
.
.
class AuthServiceProvider extends ServiceProvider
{
    .
    .
    .
    public function boot()
    {
        $this->registerPolicies();
        // 修改策略自动发现的逻辑
        Gate::guessPolicyNamesUsing(function ($modelClass) {
            // 动态返回模型对应的策略名称,如:// 'App\Model\User' => 'App\Policies\UserPolicy',
            return 'App\Policies\\'.class_basename($modelClass).'Policy';
        });
    }
}

以上代码中的这行:

  Gate::guessPolicyNamesUsing()

其中,Gate这个类我class在上面用use引入了门面,但是这个静态调用的方法我没找到在哪啊?请指教
补充:此处不引入门面会报错。

//也就是加上这句:
use Illuminate\Support\Facades\Gate;

但是依然不清楚这个门面是怎么找到对应的方法的,也就是一楼找到的方法,直接use到一楼的那个类,会报错(已在一楼说明)。

附言 1  ·  4年前

问题补充:

 Gate::guessPolicyNamesUsing()

这里的Gate为什么没有use引入就直接用了?
这个类应该不属于公共命名空间才对啊?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php

file

因为在 Illuminate\Auth\Access\Gate 这个类中,没有这个静态方法,而只有同名的普通方法,所以报错;
最好 use Illuminate\Support\Facades\Gate, laravel 本质上还是调用 Illuminate\Auth\Access\Gate 中的这个方法,只是通过 Facade 静态调用更加方便。
引入Facade,比如这儿,use Illuminate\Support\Facades\Gate 或 use \Gate 都可以,后面是前面的别名。定义在 config\app.php 的 aliases 数组中。

4年前 评论
dryang (楼主) 4年前
dryang (楼主) 4年前
theDog (作者) 4年前
dryang (楼主) 4年前
讨论数量: 1

vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php

file

因为在 Illuminate\Auth\Access\Gate 这个类中,没有这个静态方法,而只有同名的普通方法,所以报错;
最好 use Illuminate\Support\Facades\Gate, laravel 本质上还是调用 Illuminate\Auth\Access\Gate 中的这个方法,只是通过 Facade 静态调用更加方便。
引入Facade,比如这儿,use Illuminate\Support\Facades\Gate 或 use \Gate 都可以,后面是前面的别名。定义在 config\app.php 的 aliases 数组中。

4年前 评论
dryang (楼主) 4年前
dryang (楼主) 4年前
theDog (作者) 4年前
dryang (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!