Jest to wyciąganie armaty na muchę, ale żeby poznać dobrze FW trzeba sporo pisać. Więc na potrzebę chwili ( a może i dużej chwili ) napisałem skrypt notatek bazując na Code Igniterze.
Na początek logowanie w kontrolerze easyNotes:
public function login()
{
if ( $this -> is_logged() )
{
redirect( 'easynotes/index', "Location" );
}
else
{
$form_data['login'] = array( 'id' => 'login_id', 'name' => 'login' );
$form_data['password'] = array( 'id' => 'pass_id', 'name' => 'password' );
$form_rules['login'] = 'required|xss_clean';
$form_rules['password'] = 'required|xss_clean';
$this -> validation -> set_rules( $form_rules );
if ( $this -> validation -> run() == FALSE )
{
$form_data['login']['value'] = $this -> input -> post ( 'login' );
$form_data['password']['value'] = $this -> input -> post( 'password' );
$this -> response['content'] = $this -> load -> view( 'login_form', $form_data, TRUE );
}
else
{
$this -> load -> model( 'User' );
$query = $this -> User -> get_user( $this -> input -> post( 'login' ), $this -> input -> post( 'password' ) );
// login and password are correct
if ( $query -> num_rows() == 1 )
{
$item = $query -> result_array();
$array_data = array( 'user_id' => $item[0]['user_id'], 'logged_in' => TRUE );
$this -> session -> set_userdata( $array_data );
redirect( 'easynotes/index' );
}
}
}
Korzystam tutaj z biblioteki validation. Najciekawszy fagment tego kodu to właśnie przygotowanie reguł do walidacji oraz jej sprawdzenie:
$form_rules['login'] = 'required|xss_clean';
$form_rules['password'] = 'required|xss_clean';
$this -> validation -> set_rules( $form_rules );
if ( $this -> validation -> run() == FALSE )
Wywołana jest tu metoda set_rules, która jak argument przyjmuje tablicę z regułami walidacji dla poszczególnych pól formularza ( nazwy pól to klucze tablicy ). Jeśli walidacja się uda to sprawdzamy w bazie czy taki użytkownik z takim hasłem istnieje.
$this -> load -> model( 'User' );
$query = $this -> User -> get_user( $this -> input -> post( 'login' ), $this -> input -> post( 'password' ) );
// login and password are correct
if ( $query -> num_rows() == 1 )
{
$item = $query -> result_array();
$array_data = array( 'user_id' => $item[0]['user_id'], 'logged_in' => TRUE );
$this -> session -> set_userdata( $array_data );
redirect( 'easynotes/index' );
}
Ładujemy model User i pobieramy użytkownika. Jeśli mamy 1 wynik to za pomocą biblioteki do obsługi sesji zapisujemy sobie jakieś dane w niej ( tutaj przykładowe ), po czym następuje przekierowanie na stronę główną. Kolejna metoda kontrolera:
private function is_logged()
{
if( $this -> session -> userdata( 'logged_in' ) && $this -> session -> userdata( 'user_id' ) > 0 )
return TRUE;
else
return FALSE;
}
Sprawdza czy użytkownik jest zalogowany i zwraca odpowiednia wartość logiczną.
public function logout()
{
if ( $this -> is_logged() )
{
$this -> session -> sess_destroy();
}
redirect( 'easynotes/index', 'Location' );
}
Wylogowanie polega na zniszczeniu sesji i przekierowaniu użytkownika na stronę główną.
Model User i jego metody:
class User extends Model
{
public function __construct()
{
parent::__construct();
}
public function get_user( $login, $pass )
{
$this -> db -> where( 'login', $login );
$this -> db -> where( 'password', md5( $pass ) );
return $this -> db -> get( 'users' );
}
}
Możnaby pobierać do metody get_user jako trzeci parametr sposób hashowania hasła, ale dla uproszczenia napisałem to tak jak jest. Korzystam tutaj z biblioteki database, do której dostęp mam poprzez:
$this ->db -> metoda();
Za pomocą metody WHERE ustawiam klauzulę warunkową dla zapytania SQL a następnie zwracam zasób z metody get(), która jako argument przyjmuje nazwę tabeli.
Pozostałych modeli oraz widoków opisywał nie będę, są one analogiczne do przedstawionego kodu. Tu opisałem pokrótce sposób korzystania z bazy danych oraz z sesji.