Laravel 8:找不到类'App\Policies\Gate'

Posted

技术标签:

【中文标题】Laravel 8:找不到类\'App\\Policies\\Gate\'【英文标题】:Laravel 8: Class 'App\Policies\Gate' not foundLaravel 8:找不到类'App\Policies\Gate' 【发布时间】:2021-06-12 05:55:14 【问题描述】:

我定义了一个名为 UserPolicy 的策略,如下所示:

class UserPolicy

    use HandlesAuthorization;

    public function edit(User $user)
    
        if(Gate::allows('edit', $user))
            return view('admin.users.edit' , compact('user'));
        
        abort(403);
    

AuthServiceProvider.php,我这样称呼它:

protected $policies = [
        // 'App\Models\Model' => 'App\Policies\ModelPolicy',
        User::class => UserPolicy::class
    ];

然后在 Blade 中,我添加了这个:

@can('edit', $user)
   <a href=" route('users.edit' , ['user' => $user->id]) " class="btn btn-sm btn-primary">Edit</a>
@endcan

但是现在,我得到了这个错误:

找不到类“App\Policies\Gate”

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

看起来你还没有在UserPolicy类中导入Gate门面

use Illuminate\Support\Facades\Gate;

【讨论】:

太棒了!但现在我得到Maximum function nesting level of '256' reached, aborting! 看到这个答案***.com/questions/8656089/… @tejoslaeslio 您的门需要返回 true 或 false 以指示用户是否有权执行任务。您正在返回视图(它本身再次调用门) @apokryfos 那么正确的方法是什么 这取决于你需要门做什么。这个想法是当你有@can('edit', $user) 行来确定当前用户是否可以对参数$user 执行edit 操作。如果当前用户可以编辑$user,则门需要返回true,否则返回false。这实际上取决于您的编辑策略是什么。也许您需要检查当前用户是否与$user 相同,或者当前用户是否是用户管理员或类似的人

以上是关于Laravel 8:找不到类'App\Policies\Gate'的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 - 找不到驱动程序:Illuminate\Database\QueryException 找不到驱动程序(SQL:select * from `list`)

在 laravel-8 中找不到 Laravel PHP 错误 404 [重复]

Laravel 6:找不到类“表单”

找不到类“Laravel\Socialite\SocialiteServiceProvider”

“找不到类 'Fideloper\Proxy\TrustProxies'” LARAVEL

在 Laravel 中找不到异常类