CodeIniter podstawy – 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.