寻找以下函数的更好执行,特别是处理复选框。
/**
* 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');
}
我认为你做得很好,但你可以测试状态的值为字符串'是'。未选中的复选框不会注册任何东西,本质上是一样的。假设你的复选框输入value="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;
}
}
这里的问题是,如果输入中没有status,则不会调用该函数,如果复选框未选中,则不会调用该函数。因此,如果用户设置和取消设置,它不会取消设置。
因此,据我所知,我们都会为控制器中的输入生成真值和假值,这是一种传统做法。您唯一真正的选择是您希望在表单中的输入上设置什么值。