我使用Laravel 5.0,我需要在线/离线设置模型。我在bootstrap中使用了一个切换复选框:
<td>
<input onchange="window.location.href='/changestate'" type="checkbox" checked data-toggle="toggle" data-on="Online" data-off="Offline" data-size="mini" >
</td>
我的控制器中的功能:
public function changeState($id)
{
if (checked === "Online") {
$job->confirmed=1;
$job->save();
} else if (checked ==="Offline") {
$job->confirmed=0;
$job->save();
}
return redirect('/');
}
和我的功能路线:
Route::get('/changeState/{id}','JobController@changeState');
我在我的数据库True或False / Online或Offline
中设置了布尔值有人能帮助我吗?
答案 0 :(得分:0)
这对我来说是这样的,您每次点击都会刷新页面,但是通过预定义检查,如果代码有效,他们将始终在数据库中取消选中它们。
您没有将任何$id
传递到网址中,因此未加载job
。
选中将显示未定义,未设置变量。
尝试使用内联JS来实现它并不高效。我假设你已经加载了jQuery,如果你没有,我非常建议你这样做是为了简单和容易发送数据。
以下答案只是对 COULD 所做的事情的基本重写,以达到预期效果。
//复选框
<td>
<input class="changeStatus" data-modelid="{{ $model->id }}"
type="checkbox" {{ ($model->confirmed == 1) ? 'checked' : '' }}
data-toggle="toggle" data-on="Online" data-off="Offline"
data-size="mini"
>
</td>
// js
<script>
$('.changeStatus').change(function() {
var modelId = $(this).data('modelid');
var checked_status = $(this).prop('checked');
var checked;
if(checked_status == true) checked = 1; else checked = 0;
$.ajax({
url: '/changestate/'+modelid+'?checked='+checked,
type: 'get'
});
});
</script>
// controller
use Illuminate\Http\Request;
public function changeState(Request $request, $id)
{
if($request->query('checked')) {
if($request->query('checked') == 1 || $request->query('checked') == 0) {
$job = Model::find($id);
$job->confirmed = $request->query('checked');
$job->save();
}
}
}