Podręcznik użytkownika CodeIgniter wersja 2.2.1


Helpery

Helpery, jak sama nazwa wskazuje, mają pomagać w różnych sytuacjach. Każdy helper jest kolekcją funkcji z danej kategorii. Mamy helper URL, który pomaga w tworzeniu linków, helper Form który pomaga przy tworzeniu elementów formularzy, helper Text odpowiadający za różne typy formatowania, helper Cookie który pomaga w tworzeniu i odczycie ciasteczek, helper File który można wykorzystać przy operacjach na plikach itd.

W przeciwieństwie do innych systemów, w CodeIgniterze helpery nie mają postaci zorientowanej obiektowo. Są prostymi proceduralnymi funkcjami. Każda funkcja helpera spełnia jedno specyficzne zadanie, przy jednoczesnym braku zależności od innych funkcji.

CodeIgniter nie ładuje helperów domyślnie, więc pierwszym krokiem przy korzystaniu z nich jest ich załadowanie. Raz załadowany helper jest globalnie dostępny w obrębie kontrolerów i widoków.

Helpery znajdują się zazwyczaj w folderze system/helpers lub application/helpers. CodeIgniter najpierw sprawdzi folder application/helpers. Jeśli ten katalog nie istnieje, albo pożądanego przez nas helpera tam nie ma, następnym miejscem które zostanie sprawdzone będzie folder system/helpers.

Ładowanie helperów

Ładowanie helpera odbywa się w prosty sposób, za pomocą następującej funkcji:

$this->load->helper('nazwa');

Gdzie nazwa jest nazwą pliku helpera, bez rozszerzenia .php oraz bez częsci "helper" w nazwie.

Dla przykładu, aby załadować helper URL, którego nazwa pliku to url_helper.php, należy wykonać następującą funkcję:

$this->load->helper('url');

Helper może być załadowany gdziekolwiek w kontrolerze (lub nawet w widoku, chociaż nie jest to dobrą praktyką), ważne jednak aby został załadowany przed skorzystaniem z niego. Można załadować helper w konstruktorze kontrolera, w ten sposób stanie się on dostępny dla każdej z funkcji lub załadować go tylko w wybranej funkcji, która będzie z niego korzystała.

Uwaga: Funkcja przedstawiona powyżej - ładująca helper - nie zwraca żadnej wartości. Dlatego nie próbuj przypisywać jej do żadnej zmiennej. Używaj jej tak jak pokazano.

Ładowanie wielu helperów

Jeśli musisz załadować więcej niż jeden helper na raz, umieść je w tablicy w następujący sposób:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

Automatyczne ładowanie helperów

Jeśli okaże się, że potrzebujesz jakiegoś helpera globalnie, w obrębie całej aplikacji, możesz kazać CodeIgniterowi ładować go automatycznie podczas inicjalizacji systemu. Można to zrobić otwierając plik application/config/autoload.php i dodając dany helper do tablicy autoload.

Korzystanie z helpera

Jeśli załadujesz helper, który zawiera funkcje, z których zamierzasz skorzystać, wywołuj je tak jak standardowe funkcje PHP.

Dla przykładu, aby utworzyć link za pomocą funkcji anchor() w widoku, należy zrobić tak:

<?php echo anchor('blog/comments', 'Kliknij tutaj');?>

Gdzie "Kliknij tutaj" jest nazwą dla linku, a "blog/comments" jest adresem URI do kontrolera/funkcji, do którego linkujemy.

"Rozszerzanie" helperów

Aby "rozszerzyć" helper, utwórz plik w folderze application/helpers/ o nazwie identycznej jak istniejący helper, ale poprzedzonej prefixem MY_ (ten element jest konfigurowalny. Zobacz poniżej.).

Jeśli chcesz dodać tylko konkretną funkcjonalność do istniejącego helpera - np. dodać funkcję lub dwie, albo zmienić zachowanie konkretnej funkcji - to nadpisywanie całego helpera swoją wersją jest zdecydowanie złym rozwiązanie. W takim wypadku o wiele prostszym rozwiązaniem jest "rozszerzenie" helpera. Pojęcie "rozszerzania" w tym kontekście jest oczywiście użyte w dosyć luźny sposób, ponieważ funkcje helperów są proceduralne i nie mogą być rozszerzane w tradycyjnym programistycznym znaczeniu. W każdym razie otrzymujemy możliwość dodawania funkcjonalności lub nawet zmieniania natywnego sposobu działania funkcji helperów.

Dla przykładu, aby rozszerzyć natywną funkcjonalność helpera Array, musimy utworzyć plik application/helpers/MY_array_helper.php i dodać lub nadpisać funkcje:

// funkcja any_in_array() nie znajduje się w pliku helpera Array, więc jest definicją nowej funkcji
function any_in_array($needle, $haystack)
{
    $needle = (is_array($needle)) ? $needle : array($needle);

    foreach ($needle as $item)
    {
        if (in_array($item, $haystack))
        {
            return TRUE;
        }
        }

    return FALSE;
}

// funkcja random_element() znajduje się w pliku helpera Array, dlatego nadpisuje funkcję natywną
function random_element($array)
{
    shuffle($array);
    return array_pop($array);
}

Ustanawianie własnego prefixu

Prefix dla "rozszerzanych" helperów jest tym samym, którego używamy do rozszerzania bibliotek i klas Core. Aby ustanowić swój własny prefix otwórz plik application/config/config.php i poszukaj tego elementu:

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

Zauważ, że wszystkie natywne biblioteki CodeIgnitera mają prefix CI_, dlatego NIE UŻYWAJ go jako własnego prefixu.

Co teraz?

W spisie treści znajdziesz listę wszystkich dostępnych helperów. Przejrzyj każdy z nich, aby dowiedzieć się co oferują.