Cytat(mike @ 23.08.2011, 15:32:26 )

Nigdy w życiu nie pisz takich metod! Za zwracanie kilku informacji z jednej metody powinno się zakuwać w dyby i chłostać na rynku miejskim.
Rozwalił mnie ten post

. W takim razie jak inaczej byś napisał taką metodę?
/*
* Zwykłe zalogowanie
*/
public function login()
{
$callback = array(); // tablica z błędami lub komunikatem o powodzeniu if ( ! Auth::instance()->logged_in()) // nie jestem zalogowany w Auth
{
// walidacja
$rules = Validation::factory($_POST)
->rule('password', 'not_empty')
->rule('password', 'min_length', array(':value', 6)) ->rule('password', 'max_length', array(':value', 32)) ->rule('username', 'not_empty')
->rule('username', 'min_length', array(':value', 3)) ->rule('username', 'max_length', array(':value', 32)) ->rule('username', 'regex', array(':value', '/^[-\pL\pN_.]++$/uD'));
if ( ! $rules->check()) // błąd walidacji
{
$callback['errors'] = $rules->errors('validation');
return $callback;
}
$user = ORM::factory('user')->where('username', '=', $_POST['username'])->find();
if ( ! $user->loaded())
$callback['errors']['username'] = __('this user does not exist');
else
{
if ($user->has('roles', ORM
::factory('role', array('name' => 'login')))) {
// logowanie
$login = Auth::instance()->login(
$_POST['username'],
$_POST['password'],
isset($_POST['remember']) ?
(bool
) $_POST['remember'] : FALSE );
if ($login)
$callback['success'] = __('you are logged in');
else
$callback['errors']['password'] = __('invalid password');
}
else
$callback['error'] = __('this account has not been activated');
}
return $callback;
}
else
{
$callback['success'] = __('you are logged in');
return $callback;
}
}