Szukaj…


Włączanie haków

Funkcję przechwytywania można globalnie włączyć / wyłączyć, ustawiając następujący element w pliku application/config/config.php :

$config['enable_hooks'] = TRUE;

Definiowanie haka

Haki są zdefiniowane w pliku application/config/hooks.php . Każdy hak jest określony jako tablica z tym prototypem

$hook['pre_controller'] = array(
        'class'    => 'MyClass',
        'function' => 'Myfunction',
        'filename' => 'Myclass.php',
        'filepath' => 'hooks',
        'params'   => array('beer', 'wine', 'snacks')
);

Indeks tablicy koreluje z nazwą konkretnego punktu zaczepienia, którego chcesz użyć. W powyższym przykładzie punktem zaczepienia jest pre_controller . Lista punktów zaczepienia znajduje się poniżej. W asocjacyjnej tablicy haczyków należy zdefiniować następujące elementy:

klasa Nazwa klasy, którą chcesz wywołać. Jeśli wolisz użyć funkcji proceduralnej zamiast klasy, pozostaw ten element pusty.

function Nazwa funkcji (lub metody), którą chcesz wywołać.

nazwa pliku Nazwa pliku zawierającego twoją klasę / funkcję.

file-path Nazwa katalogu zawierającego skrypt.

params Wszelkie parametry, które chcesz przekazać do skryptu. Ten element jest opcjonalny.

Punkty zaczepienia

pre_system

Wywoływany bardzo wcześnie podczas wykonywania systemu. W tym momencie załadowano tylko klasę testów porównawczych i haczyków. Nie miały miejsca żadne routing ani inne procesy.

pre_controller

Wywoływany bezpośrednio przed wywołaniem dowolnego z kontrolerów. Wszystkie klasy podstawowe, routing i kontrole bezpieczeństwa zostały wykonane.

post_controller_constructor

Wywoływany natychmiast po utworzeniu instancji kontrolera, ale przed wywołaniem dowolnej metody.

post_controller

Wywoływany natychmiast po pełnym uruchomieniu kontrolera.

display_override

_display() metodę _display() , używaną do wysyłania sfinalizowanej strony do przeglądarki internetowej pod koniec wykonywania systemu. Pozwala to na użycie własnej metodologii wyświetlania. Zauważ, że będziesz musiał odwołać się do super-obiektu CI za pomocą $this->CI =& get_instance() a następnie sfinalizowane dane będą dostępne poprzez wywołanie $this->CI->output->get_output() .

cache_override

Umożliwia wywołanie własnej metody zamiast metody _display_cache() w bibliotece wyników. Pozwala to na użycie własnego mechanizmu wyświetlania pamięci podręcznej.

post_system

Wywoływany po przesłaniu ostatecznej renderowanej strony do przeglądarki, pod koniec wykonywania systemu po przesłaniu sfinalizowanych danych do przeglądarki.

Przykład haka przed kontrolerem przy użyciu CodeIgniter

W folderze application/hooks utwórz plik o nazwie Blocker.php i wklej poniższy kod.

<?php
class Blocker {

    function Blocker(){
    }
    
    /**
     * This function used to block the every request except allowed ip address
     */
    function requestBlocker(){
        
        if($_SERVER["REMOTE_ADDR"] != "49.248.51.230"){
            echo "not allowed";
            die;
        }
    }
}
?>

W application/config/hooks.php zadeklaruj następujący hook.

$hook['pre_controller'] = array(
        'class'    => 'Blocker',
        'function' => 'requestBlocker',
        'filename' => 'Blocker.php',
        'filepath' => 'hooks',
        'params'   => ""
);

W application/config/config.php ustaw następującą wartość jako true

Definiowanie haka

Haki są zdefiniowane w pliku application/config/hooks.php . Każdy hak jest określony jako tablica z tym prototypem:

$hook['pre_controller'] = array(
      'class'    => 'MyClass',
      'function' => 'Myfunction',
      'filename' => 'Myclass.php',
      'filepath' => 'hooks',
      'params'   => array('bread', 'wine', 'butter')
);
  • CLASS - klasa, którą chcesz wywołać, jeśli jest kodem proceduralnym, pozostaw ją pustą.
  • FUNCTION - nazwa funkcji, którą chcesz wywołać.
  • FILENAME - nazwa pliku zawierającego twoją klasę / funkcję.
  • FILEPATH - Lokalizacja pliku przechwytującego.
  • PARAMS parametr w razie potrzeby jest opcjonalny


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow