2012-02-10 1 views
0

Я хочу отметить флажки, если они были выбраны с использованием существующих данных из db или в postdata. У меня есть массив всех ролей, $roles и $user_roles содержит текущие роли.Отметьте флажок, если он установлен в postdata или в существующих пользовательских данных в Kohana

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

ответ

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

Предполагая, что вы пытаетесь обновить существующий пользователь в БД ...

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 либо массив ролей пользователей из БД, используя $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), поскольку это условие существует в модели или контроллере, а роли пользователя всегда актуальны.

 Смежные вопросы

  • Нет связанных вопросов^_^