调用 Gate 时出现 "Maximum function nesting level of '256' reached, aborting!" 错误
Getting "Maximum function nesting level of '256' reached, aborting!" error while calling Gate
我定义了一个名为 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
但是现在,我得到这个错误:
Class 'App\Policies\Gate' not found
当我在 Policy 中这样调用 Gate 时:use Illuminate\Support\Facades\Gate;
发生此错误:
Maximum function nesting level of '256' reached, aborting!
所以我尝试将 xdebug.max_nesting_level = -1
添加到 php.ini
但仍然出现相同的错误。
我该如何解决这个问题?
你不能 return 除了 Policy
中的 boolean
之外的任何东西 class.You 应该 return false
或 true
.
此外,当您在 policy
class 中使用 Gate
时,您会再次重复检查 policy
class,这会导致无限循环。
所以这是正确的方法:
public function edit(User $user)
{
if($user_is_allowed_to_access){
return true
}
}
我定义了一个名为 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
但是现在,我得到这个错误:
Class 'App\Policies\Gate' not found
当我在 Policy 中这样调用 Gate 时:use Illuminate\Support\Facades\Gate;
发生此错误:
Maximum function nesting level of '256' reached, aborting!
所以我尝试将 xdebug.max_nesting_level = -1
添加到 php.ini
但仍然出现相同的错误。
我该如何解决这个问题?
你不能 return 除了 Policy
中的 boolean
之外的任何东西 class.You 应该 return false
或 true
.
此外,当您在 policy
class 中使用 Gate
时,您会再次重复检查 policy
class,这会导致无限循环。
所以这是正确的方法:
public function edit(User $user)
{
if($user_is_allowed_to_access){
return true
}
}