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