我有一个项目列表,可以通过复选框“完成”或“未完成”。
现在,当一个项目没有完成时,我使用复选框标记它已完成,同样的方式可以解决它。
但是后来例如:我有一个未完成的项目,我希望标记为完成它的工作,但后来我想再次标记为未完成,并且不会工作。它将保持“完成”而不是再次回到“未完成”。我该如何解决这个问题?
控制器:
class ProjectController extends Controller
{
private $project;
public function __construct(Project $project){
$this->project = $project;
$this->project = $project
->with('user');
}
public function getUsersTotal () {
$project_users = DB::table('users')
->select('browser')
->groupBy('browser')
->get();
}
public function index()
{
$projects = Project::get();
return view('project.index', array('projects' => $projects));
}
public function create()
{
return view('project.create');
}
public function store(CreateProjectRequest $request, Project $project)
{
$project->create($request->all());
return redirect()->route('project.index');
}
public function show($id)
{
//
}
public function edit($id)
{
$project = $this->project->find($id);
return view('project.edit', ['project' => $project, 'id' => 'edit']);
}
public function update(CreateProjectRequest $request, $project)
{
$project = $this->project->find($project);
$project->fill($request->input())->save();
return redirect('project');
}
public function destroy($projectId)
{
$this->project->destroy($projectId);
return redirect('project');
}
}
HTML(刀片):
{!! Form::model($project, ["route"=> ['project.update',$project->id] , "method" => 'PATCH']) !!}
@include('project._form')
<div class="form-group {{ $errors->has('completed') ? 'has-error' : '' }}">
{!! Form::label('name', trans('common.completed'), ['class' => 'form-label']) !!}
{!! Form::checkbox('completed', '1', false, ['class' => '']) !!}
</div>
<br>
<div class="form-group">
{!! Form::submit( trans('common.edit'), ["class"=>"btn btn-primary"]) !!}
</div>
{!! Form::close() !!}
{!! delete_form(['project.destroy', $project->id]) !!}
答案 0 :(得分:3)
您需要在复选框定义之前使用此功能:
<input name='completed' type='hidden' value='0'>
{!! Form::checkbox('completed', '1', false, ['class' => '']) !!}
这将确保在未选中复选框时将0
的值发送到应用程序。
答案 1 :(得分:1)
复选框的主要问题是,如果取消选中该复选框,则其值不在请求中。因此,在使用create()或不使用update()更改现有值时,不会保存到数据库。
我找到的最佳答案是创建一个Form Request
验证程序(如this laracast on form validation所示,并在rules()
函数检查中是否存在复选标记,如果没有,请附加它。优点是它适用于所有情况(创建新的和更新),并且它的代码位于一个地方,而不会在模型中添加隐藏字段或模型中的设置器。只是一个干净的解决方案。
这篇文章展示了它是如何完成的:http://novate.co.uk/laravel-5-checkbox-processing/
示例:
$this->merge(['attribute_name' => $this->input('attribute_name', false)]);