CodeIniter bazy danych, sesje i autoloader

Poprzednio opisałem jak zainstalować i ustawić podstawowe zmienne w CodeIgniter. Tym razem ustawimy konfigurację baz danych, sesji oraż dowiemy się jak ustawić ścieżki (routes).

Bazy danych

CodeIgniter posiada wbudowane klasy do podstawowych (i nie tylko) operacji na bazach danych. Konfiguracja dostępu i obsługi baz danych jest bajecznie prosta. Interesuje nas jeden plik application/config/database.php.

W pliku znajdują się następujące zmienne:

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Konfiguracja jest nader intuicyjna, zmienne hostname, username, password, database są oczywiste. Nazwa serwera, użytkownika – hasło oraz nazwa bazy danych Dalej mamy sterownik. Można zostawić domyślny mysql ja polecam zmienić na mysqli który jest nowszy i szybszy. Resztę można zostawić na wartościach domyślnych.

CodeIgniter wspiera obsługę wielu konfiguracji „na raz” warto więc od razu przygotować sobie osobną konfigurację dla środowiska roboczego poprzez stworzenie konfiguracji w postaci $db['production']['hostname'] = 'localhost'; gdzie na serwerze roboczym wystarczy zmienić tylko jedną zmienną $active_group = 'production' i będziemy mogli skorzystać z innej konfiguracji na środowisku roboczym.

$db['default']['db_debug'] = TRUE;

Ta opcja odpowiada za debugowanie baz danych – jeżeli w naszym zapytaniu pojawi się błąd CodeIgniter wyświetli nam informacje na temat błędnego zapytania. Polecam ustawienie tej zmiennej na wartość FALSE na serwerach produkcyjnych.

Ostatnia istotna zmienna to

$active_record = TRUE;

CodeIgniter posiada wbudowaną klasę Active Record, która pozwala na łatwe budowanie zapytań dla wybranych baz danych. Jeżeli z niej nie korzystamy warto ustawić tą zmienną na FALSE co nieznacznie przyspieszy samego frameworka.

Sesje

CodeIgniter posiada wbudowane wsparcie dla obsługi sesji i ciasteczek. Nie trzeba więc martwić się o bezpieczeństwo tychże danych, oraz można skorzystać z baz danych do przechowywania sesji. Konieczna jest jednak dodatkowa konfiguracja.

Otwieramy więc wcześniej nam znany plik application/configure/config.php i szukamy tego kodu:

$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

domyślnie CodeIgniter korzysta z plików i ciasteczek do obsługi sessji, jeżeli chcemy skorzystać z baz danych musimy zmienić zmienną sess_use_database na TRUE i dodatkowo utworzyć odpowiednią tabelę w bazie danych

CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);

Możemy też zmienić nazwę tabeli i kilka dodatkowych ustawień zwiększających bezpieczeństwo sesji. Przypominam o konieczności ustawienia $config['encryption_key'] = ''; aby wszystko działało poprawnie.

Autoloader

Wszystko mamy ustawione poprawnie, ale czegoś brakuje… Tym czymś jest autoloader. CodeIgniter posiada bardzo mały „narzut” – co oznacza, że system stara się domyślnie nie ładować nic co jest zbędne podczas podstawowej bazowej pracy z systemem.

Więc jeżeli chcesz korzystać z bazy danych, czy sesji – musisz w swoim kontrolerze załadować bibliotekę do baz danych przez skorzystanie z polecenia

$this->load->library('database');

można też ładować wiele bibliotek na raz:

$this->load->library(array('database', 'session'));

Oczywiście nie jest to złe rozwiązanie, jeżeli jednak korzystasz z baz danych w każdym kontrolerze, jest to dosyć męczące. Z pomocą przychodzi nam plik application/config/autoload.php który pozwala na automatyczne ładowanie zadanych klas:

$autoload['libraries'] = array('database','session');

Problem rozwiązany. Teraz możesz korzystać z bibliotek ładowanych automatycznie w każdym kontrolerze.

To samo dotyczy też modeli, plików konfiguracji czy pomocników. Wystarczy uzupełnić odpowiednią sekcję w pliku konfiguracji.

2 komentarze do “CodeIniter bazy danych, sesje i autoloader”

    • Ponieważ ciastko klucz ten jest wykorzystywany do szyfrowania ciastka – a CI ma swój własny system obsługi sesji, który bazuje na ciastkach.

      Odpowiedz

Dodaj komentarz

Ta strona używa Akismet do redukcji spamu. Dowiedz się, w jaki sposób przetwarzane są dane Twoich komentarzy.