Podręcznik użytkownika CodeIgniter wersja 2.2.1


Tworzenie bibliotek

Kiedy używamy terminu "biblioteki", odnosimy się do klas, które są zlokalizowane w folderze libraries, a w tym podręczniku widnieją w spisie jako "Opis klas". W tym rozdziale wyjaśnimy w jaki sposób zarządzać własnymi bibliotekami, które znajdują się w katalogu application/libraries i tymi dostarczanymi bezpośrednio przez system.

CodeIgniter pozwala na to, aby Twoje biblioteki rozszerzały natywne klasy - to na wypadek gdybyś chciał dodać do nich jakieś funkcjonalności. Możesz również całkowicie zastąpić natywną bibiotekę, poprzez umieszczenie pliku o identycznej nazwie jak ta biblioteka w folderze application/libraries.

Podsumowując:

Ta strona szczegółowo omawia te trzy koncepcje.

Uwaga: Klasa bazy danych nie może być rozszerzana lub zastępowana Twoimi własnymi klasami. Wszystkie inne klasy można natomiast rozszerzać/zastępować.

Lokalizacja bibliotek

Twoje biblioteki powiny znajdować się w folderze application/libraries, ponieważ tam CodeIgniter będzie ich szukał w momencie ich inicjalizacji.

Konwencje nazewnictwa

Plik klasy

Klasy powinny mieć taką podstawową postać (Uwaga: Używamy nazwy Someclass tylko jako przykład):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function some_function()
    {
    }
}

/* End of file Someclass.php */

Używanie Twojej klasy

Z poziomu każdej funkcji kontrolera, możesz załadować klasę używając standardowej składni:

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

Gdzie someclass jest nazwą pliku, bez rozszerzenia .php. Możesz użyć nazwy pisanej z małej lub dużej litery. CodeIgniter nie zwraca na to uwagi.

Do raz załadowanej klasy możesz odwoływać się przy użyciu wersji zapisu z małymi literami:

$this->someclass->some_function();  // Instancje obiektów będą zawsze występować pod nazwami pisanymi małymi literami

Przypisywanie parametrów podczas inicjalizowania klasy

Do funkcji, która odpowiada za załadowanie biblioteki, możesz przypisać zmienne w postaci tablicy, do drugiego parametru. Spowoduje to, że zostaną one przypisane do konstruktora klasy:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

Jeśli chcesz używać tej funkcjonalności, powinieneś wprowadzić zmiany w konstruktorze, aby był przygotowany na przyjęcie dodatkowych parametrów:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)
    {
        // Jakieś czynności ze zmienną $params
    }
}

?>

Możesz również przypisać parametry, które znajdują się w pliku konfigurayjnym. Po prostu stwórz plik konfiguracyjny, który będzie miał taką samą nazwę pliku jak klasa i zachowaj go folderze application/config/. Zauważ, że jeśli przypiszesz dodatkowe parametry, jak opisaliśmy to powyżej, to opcja z plikiem konfuguracyjnym nie będzie dostępna.

Wykorzystanie zasobów CodeIgnitera w Twojej bibliotece

Aby mieć dostęp do natywnych zasobów CodeIgnitera w bibliotece, nalezy użyć funkcji get_instance(). Zwaraca ona super obiekt CodeIgnitera.

Normalnie z każdej funkcji kontrolera możesz wywołać każdą dostępną funkcję poprzez użycie składni $this:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
itd.

$this, działa jednak tylko w kontrolerach, modelach i widokach. Jeśli chciałbyś używać klas CodeIgnitera w swojej własnej klasie, możesz to zrobić w następujący sposób:

Najpierw, przypisz obiekt CodeIgnitera do zmiennej:

$CI =& get_instance();

Kiedy już przypiszesz obiekt do zmiennej, możesz używać tej zmiennej zamiast $this:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
itd.

Uwaga: Zauważ, że powyższa funkcja get_instance() została przypisana przez referencję:

$CI =& get_instance();

To bardzo ważne. Przypisanie za pomocą referencji pozwala na użycie oryginalnego obiektu CodeIgnitera, zamiast tworzenie jego kopii.

Zastępowanie natywnych bibiotek własną wersją

Nazwanie własnej klasy w ten sam sposób jak nazwa natywnej biblioteki, spowoduje, że CodeIgniter będzie używał Twojego pliku, zamiast wersji dostarczonej przez system. Aby skorzytać tej możliwości, musisz użyć nazwy pliku oraz deklaracji klasy, takiej, jaką ma natywna biblioteka. Dla przykładu, aby zastąpić natywną bibliotekę Email musisz stworzyć plik o nazwie application/libraries/Email.php i utworzyć następującą deklarację klasy:

class CI_Email {

}

Zauważ, że większość natywnych klas ma prefiks CI_.

Aby załadować bibliotekę, wystarczy użyć standardowej funkcji ładowania:

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

Uwaga: W tym momencie, klasa bazy danych nie może być zastąpiona własną wersją.

Rozszerzanie natywnych bibliotek

Jeśli wszystko czego potrzebujesz, to dodanie określonej funkcjonalności do istniejącej już klasy (być może jednej lub dwóch funkcji), to zastępowanie całej biblioteki może nie być najrozsądniejszym rozwiązaniem. W takim wypadku lepszym rozwiązaniem jest rozszerzenie biblioteki. Rozszerzenie klasy jest prawie identyczne jak jej zastępowanie, ale z kilkoma wyjątkami:

Dla przykładu, aby rozszerzyć natywną klasę Email, musisz stworzyć plik o nazwie application/libraries/MY_Email.php i zadeklarować klasę w ten sposób:

class MY_Email extends CI_Email {

}

Uwaga: Jeśli musisz użyć konstruktora w Twojej klasie, upewnij się, że rozszerzasz konstruktor rodzica:

class MY_Email extends CI_Email {

    public function __construct()
    {
        parent::__construct();
    }
}

Ładowanie Twojej sub-klasy

Aby załadować Twoją sub-klasę użyj standardowej skladni. NIE dołączaj prefiksu. Dla przykładu, aby załadować powyższy przykład, który rozszerza klasę Email, użyjemy:

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

Po załadowaniu, klasy możemy używać tak jak dotychczas:

$this->email->some_function();

Ustalanie własnego prefiksu

Aby ustawić swój własny prefiks dla sub-klasy, otwórz plik application/config/config.php i spójrz na zmienną:

$config['subclass_prefix'] = 'MY_';

Zauważ, że wszystkie natywne biblioteki CodeIgnitera mają prefiks CI_, tak więc NIE używaj tego ciągu jako własnego prefiksu.