如果已经通过db或postdata中的现有数据选择了复选框,我想标记复选框。我有一系列所有角色,$roles
,$user_roles
包含当前角色。
foreach ($roles as $r) {
$checked = false;
if(isset($postdata['roles'][$r->id])){
$checked = true;
}
else{
foreach($user_roles as $ur){
if($ur->id == $r->id){
$checked = true;
}
}
}
<input type="checkbox" name="roles[<?php echo $r->id; ?>]" <?php if($checked){ ?>checked="checked"<?php } ?> value="<?php echo $r->id; ?>" />
代码正在运行,但我想知道我是否可以整理它。我正在使用Kohana 3.2
答案 0 :(得分:1)
$role_ids = $user_roles->as_array(NULL, 'id');
$checked = in_array($r->id, $role_ids) or Arr::path($postdata,"roles.$r->id");
echo Form::checkbox('roles['.$r->id.']', $r->id, $checked);
答案 1 :(得分:1)
假设您正在尝试更新db ...
中的现有用户foreach($roles as $role){
echo
Form::checkbox('roles[]', $role->id, in_array($role, $user_roles), array('id' => 'role-'.$role->id)),
Form::label('role-'.$role->id, $role->name);
}
$ user_roles变量是来自db的用户角色数组,使用$user->roles->find_all()
,或者是通过POST数据更新的用户角色。如果POST数据存在,那么我更新用户角色:
$roles = $this->request->post('roles');
foreach(ORM::factory('role')->find_all() as $role)
{
if (in_array($role->id, $roles))
{
// Add roles relationship
$user->add('roles', new Model_Role(array('id' => $role->id)));
}
else
{
// Remove roles relationship
$user->remove('roles', new Model_Role(array('id' => $role->id)));
}
}
然后我仍然使用$user->roles->find_all()
作为视图中显示的用户角色。
这样做意味着我不必决定在视图中显示什么,(POST或DB数据),因为模型或控制器中存在条件,并且用户角色始终是最新的。 / p>