laravel - @can 指令问题 - laravel
问题描述
注册用户可以访问jobs.edit.blade.php
其中会计师可以访问一些复选框(仅对他可见)
根据会计师提交的复选框更改数据库值(布尔值)。
@can ('isAccountant')
//some code with checkboxes
@endcan
问题是,当注册用户访问jobs.edit.blade.php并提交(复选框不可见)时,数据库中的所有布尔值都变为零
我怎样才能避免这种情况
工作.edit.blade.php
@can ('isAccountant')
<div class="row">
<div id="status">
@if ($job->entered_status == '0')
<input type="checkbox" name="entered_status" @if($job->entered_status) checked @endif> Entered <br><br>
@elseif ($job->entered_status == '1')
<input type="checkbox" name="entered_status" checked value="1" disabled> Entered <br><br>
<input type='hidden' name='entered_status' value="1">
@endif
@if ($job->sales_status == '1')
<input type="checkbox" name="despatch_status" checked value="1" disabled> All Despatches Completed <br><br>
<input type="checkbox" name="invoice_status" checked value="1" disabled> All Invoices Completed
<input type='hidden' name='despatch_status' value="1">
<input type='hidden' name='invoice_status' value="1">
@endif
@if ($job->sales_status == '0' && $job->job_status == 'Completed' && $job->despatch_status == '0')
<input type="checkbox" name="despatch_status" @if($job->despatch_status) checked @endif value="1"> All Despatches Completed <br><br>
@endif
@if ($job->sales_status == '0' && $job->job_status == 'Completed' && $job->despatch_status == '1')
<input type="checkbox" name="despatch_status" checked value="1"> All Despatches Completed <br><br>
<input type="checkbox" name="invoice_status" @if($job->invoice_status) checked @endif value="1"> All Invoices Completed <br><br>
@endif
</div>
</div>
@endcan
作业控制器.php
public function update(Request $request, $id)
{
$job = Job::find($id);
$job->customer_name = $request->customer_name;
$job->company_name = $request->company_name;
$job->job_type = $request->job_type;
$job->job_owner = $request->job_owner;
$job->job_status = $request->job_status;
$job->despatch_status = $request->has('despatch_status');
$job->invoice_status = $request->has('invoice_status');
if ($job->despatch_status == 1 && $job->invoice_status == 1) {
$job->sales_status = 1;
}
$job->entered_status = $request->has('entered_status');
AuthServiceProvider.php
public function boot()
{
$this->registerPolicies();
Gate::define('isAdmin', function ($user) {
return $user->user_type == 'Admin';
});
Gate::define('isDirector', function ($user) {
return $user->user_type == 'Director';
});
Gate::define('isProduction', function ($user) {
return $user->user_type == 'Production';
});
Gate::define('isAccountant', function ($user) {
return $user->user_type == 'Accountant';
});
}
扩展错误
_token
"nzY5y8EW5yupkL3d6aL9bcpZRYmlc5YTN94ee1uI"
_method
"PATCH"
id
"10725"
customer_name
""
company_name
""
job_type
"""
Item:\r\n
Qty:\r\n
Size:\r\n
Paper:\r\n
Print:\r\n
Each:\r\n
Total:
"""
job_owner
"Sam"
job_status
"Pending"
job_delivery_date
""
job_delivery_time
""
pk_pkl
"PKL"
entered_status
"on"
解决方案
这样做的原因是您正在使用:
$job->despatch_status = $request->has('despatch_status')
$request->has('despatch_status')
如果请求有该字段,则为 true,如果请求没有该字段,则为 false 。
我可以推荐的代码:
这将从despatch_status
请求中获取 ,如果它的true
or false
(或1
/ 0
)它将被传递给$job->despatch_status
.
但是,如果请求despatch_status
中不存在 ,->get()
则将返回null
,因此??
操作员将读取数据库中已经存在的值,因此它不会改变。
$job->despatch_status = $request->get('despatch_status') ?? $job->despatch_status;
推荐阅读
- java - maven-replacer-plugin 抛出 [错误] 非法组引用
- python - 在python中识别具有相似图案的特定元素/形状的数据结构
- google-apps-script - 将一个列表中的值匹配到不同工作表上的另一个列表并复制单个单元格 GAS
- python - Django 动态多步骤表单
- c# - WPF中的圆边3D样式按钮
- c# - Alachisoft Ncache SqlCacheDependency 通过存储过程添加依赖
- javascript - 试图过滤数组
- node.js - 我应该向 mongodb 打开多少个连接?
- postgresql - 将长(数字)文本数据类型(具有空白值)转换为日期
- google-apps-script - 如何从提示或对话框中获取数据并通过 Google Web App Script 将其放入 Google Doc