CodeIniter podstawy – bazy danych, sesje i autoloader

Spis treści

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.