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