寻找更好的执行以下功能,特别是处理复选框。
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update(CreateUserRequest $request, $id)
{
$user = User::find($id);
//TODO should be else where?
$input = $request->all();
if(isset($input['status'])) $input['status'] = 1;
else $input['status'] = 0;
$user->fill($input)->save();
return redirect('admin/users');
}
答案 0 :(得分:1)
我认为你做得很好,但你可以测试status的值为字符串'yes'。未经检查的复选框只是不注册任何东西,所以你将基本上做同样的事情。假设您的复选框输入值为“是”,则:
$input = $request->all();
if($input['status'] === 'yes') $input['status'] = 1;
else $input['status'] = 0;
无论如何,你将不得不让'else'为未经检查的案例定义一些值。这只是你想要用于检查值的问题。你甚至可以把它设为1,但是未经检查的情况不会是0,你仍然需要这个条件来分配它。
如果你想要从你的控制器中取出逻辑,你可能已经尝试在DDL中将字段默认设置为0,然后在实现mutator(setter)的模型中设置:
class User extends Eloquent {
public function setStatusAttribute($value)
{
$this->attributes['status'] = 1;
}
}
这里的问题是,如果您的输入中没有状态,则不会调用此选项,如果取消选中该复选框,则不会显示此状态。因此,如果用户设置和取消设置,它将不会取消它。
因此,据我所知,作为传统做法,我们都为控制器中的输入生成真值和假值。您真正的选择是您希望在表单中的输入上设置什么值。