- Poznanie budowy i sposobu działania kontrolerów - podstawowego elementu CI
Kontroler to klasa umieszczona w pliku o nazwie takiej jak nazwa klasy, umieszczonym w "application/controllers" Nazwa zawierać można znaki alfanumeryczne (cyfry i litery) oraz znaki podkreślenia. Nazwa klasy jest używana w linkach URL do jej wywoływania (co już robiliśmy wcześniej). Przykładowo link:
http://localhost/html/ci/index.php/form
Wywoła klasę o nazwie "Form". Klasa ta powinna znajdować się w pliku "form.php". Nazwa pliku musi zaczynać się z małej litery, nazwa klasy - z dużej. Wykorzystany przez nas wcześniej kontroler wyglądał następująco:
<?php
class Test extends Controller
{
function index()
{
echo 'Test CI';
}
}
?>
A więc tak:
class NAZWAKLASY extends Controller
Deklaruje nam klasę o podanej nazwie. Fraza
extends Controller oznacza że nasza klasa dziedziczy (dostaje) wszystkie metody klasy "Controller". Szczegóły są tu nie potrzebne. Po prostu klażda klasa kontroler musi to mieć.
function index()
{
echo 'Test CI';
}
Tutaj mamy "standardową" metodę. W przypadku CI jest mały dodatek. Otóż
metoda o nazwie index wywołana zostanie domyślnie jeżeli w linku nie podamy nazwy określonej metody.
<?php
class Test extends Controller
{
function index()
{
echo 'Test CI';
}
function dodatek()
{
echo 'Dodatkowy tekst';
}
}
?>
Link typu
http://localhost/html/ci/index.php/test wywoła metodę index, a http://localhost/html/ci/index.php/test/dodatek - metodę dodatek.
Prywatne metody, niedostępne poprzez URL tworzy się zaczynając ich nazwę od znaku podkreślenia:
function _utility()
{
// jakiś kod
}
Domyślny kontroler jaki zostanie wywołany przy pustym URLu (sam index.php) ustawić można w
application/config/routes.php. Mamy tam:
$route['default_controller'] = "welcome"; gdzie wartość (tutaj "welcome") oznacza nazwę domyślnie wywoływanego kontrolera.
Konstruktory tworzy się normalnie z tym że
trzeba dodać jedną linijkę kodu. Dla PHP4:
<?php
class Blog extends Controller {
// konstruktor to metoda o nazwie jak nazwa klasy
function Blog()
{
parent::Controller();
}
}
?>
W PHP5 "nazwa" konstruktora to __construct()
<?php
class Blog extends Controller {
function __construct()
{
parent::Controller();
}
}
?>
W konstruktorze musi znaleźć się
parent::Controller();. Jeżeli nie potrzebujemy to nie musimy tworzyć konstruktora.