Laravel 政策通过 blade 模板

Laravel Policies Via blade template

当我想使用策略限制用户访问时出现错误,当用户以访客身份访问系统时,系统不会显示编辑按钮,反之亦然,如果用户是管理员,系统将显示编辑按钮。但是当用户以管理员身份登录时出现错误,而当用户未登录时没有错误。这是我的错误消息

oo few arguments to function App\Policies\InverterPolicy::update(), 1 passed in /Applications/XAMPP/xamppfiles/htdocs/PROJECT/ta/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 691 and exactly 2 expected

这是我的blade

@can('update',App\Inverter::class)
    <a href="{{ route('inverters.edit',[$data->id]) }}"><button type="button" class="btn btn-warning" name="button">Edit</button></a>
@endcan

这是我的控制器

public function update(Request $request, Inverter $inverter)
{
  $this->authorize('update',$inverter);
  $data = $request->validate([
    'name'=>'bail|required|max:191',
    'warehouse_id'=>'bail|required|numeric',
    'company_id'=>'bail|required|numeric',
    'length'=>'numeric',
    'width'=>'numeric',
    'height'=>'numeric',
    'maxInputPower'=>'numeric',
    'maxInputVoltage'=>'numeric',
    'maxInputCurrent'=>'numeric',
    'MPPTOperatingRange'=>'numeric',
    'parallelInput'=>'numeric',
    'MPPTTrackers'=>'numeric',
    'nominalOutputPower'=>'numeric',
    'maxOutputPower'=>'numeric',
    'nominalOutputCurrent'=>'numeric',
    'maxOutputCurrent'=>'numeric',
    'ACFrequencyRange'=>'numeric',
    'THDI'=>'numeric',
    'efficiency'=>'numeric',
    'MPPTEfficiency'=>'numeric',
    'euroEfficiency'=>'numeric',
  ]);
  Inverter::find($inverter->id)->update($data);
  return redirect(action('InverterController@index'));
}

这是我的政策

public function update(User $user, Inverter $inverter)
{
  return in_array($user->role,[
    'Admin',
  ]);
}

当您使用 class 名称而不是实例作为第二个参数对 User 调用 can() 方法时,您实际上是在调用该方法时根本没有第二个参数.只需在您的策略中使 $inverter 可为空即可,它应该已修复:

public function update(User $user, Inverter $inverter = null)
{
  return in_array($user->role,[
    'Admin',
  ]);
}