Struktura pliku router.ini
Każdy plugin ma własny plik "nasz_plugin/config/router.ini" który wygląda następująco:[/image/#ekey/#width/#height/] name=image controller=imageController [/image/#ekey/#width/#height/#transform/] name=imageTransform controller=imageController
Dana ścieżka definiowana jest w postaci 3 wierszy.
- W pierwszym w nawiasach kwadratowych definiujemy adres który znajdzie się po naszym katalogu głównym systemu, czyli jeżeli nasz system jest pod adresem "www.adres.pl/windu/" to pierwszy routing definiuje ścieżkę "www.adres.pl/windu/image/urtydhe/100/200/". Znaczek kratki # mówi nam, że w tym miejscu będzie parametr ulegający zmianie, czyli zmienna (odpowiednik zmiennej $_GET) natomiast jeżeli wpiszemy zwykły wyraz nie poprzedzony # wtedy system będzie szukał dokładnie takiego wyrazu, na tej podstawie możemy zdefiniować konkrety routing.
- W 2 wierszu mamy nazwę routingu która posłużyć może do wywołania danego adresu przy pomocy routera w naszym kontrolerze.
- Na końcu defiuniujemy nazwę kontrolera na który ma być kierowany ruch z danej ścieżki.
Zmienna #action
W naszym routerze możemy jeszcze zastosować jedną zmienną specjalną #action[/admin/install/] name=admin-install controller=adminInstallController [/admin/install/#action/] name=admin-install-action controller=adminInstallController [/admin/install/#action/#id/] name=admin-install-action-id controller=adminInstallController
Zmienna #action jest pobierana przez nasz router i odnosi się do metody wewnątrz kontrolera na który kierowany jest ruch. Jeżeli nie okrelimy zmiennej #action to system wywoła domyślną metode index() natomiast jeżeli ustawimy zmienną #action na 'moja_funkcja' to system wywoła metode 'moja_funkcja' z kontrolera.
Nadpisywanie ścieżek
Routery z poszczególnych pluginów są sklejane w jeden a system wyszukuje ścieżki od tyłu tak że ostatni w kolejności plugin w configu może nadpisać daną ściezkę. Jeżeli plugin "front" ma zdefiniowanąścieżkę [/] (czyli proste wpisanie adresu strony bez żadnych zmiennych) to my dodając na końcu w pliku "app/includes/config.php" w stałej plugins nasz plugin i w jego pliku router.ini dodamy zmienną [/] możemy nadpisać zachowanie systemu. W takim wypadku nie plugin front a właśnie nasz plugin będzie kierował zachowaniem systemu w tej ścieżce. Dodając pluginy należy zwarać na to uwagę!Korzystanie z klasy router do przekierowań
W systemie mamy dostępną klasę router.class.php która posiada liczne funkcje pozwalające na dokonywanie przekieorwań lub zwracanie ścieżek z routingu. Przykłady wykrozsytania routera
route($target, $variables = array(), $anchor = null)
Generuje link przekierowania na określony routing i zwraca ścieżkę
- $target - jest nazwą danego routingu podawaną jako parametr name w router.ini
- $variables - jest tablicą z parametrami, czyli zmeinnymi jakie powinny być przypisane do ścieżki
- $anchor - to co ma być na końcu ścieżki po znaku #
[/admin/install/#action/#id/] name=admin-install-action-id controller=adminInstallController
route('admin-install-action-id',array('action'=>'actionName','id'=>10))
redirect($target, array $query = array(), $permanent = false, $anchor = null)
Przekierowywuje (robi tak zwany redirect) na określoną na podstawie routingu ścieżkę
- $target - jest nazwą danego routingu podawaną jako parametr name w router.ini
- $query - jest tablicą z parametrami, czyli zmeinnymi jakie powinny być przypisane do ścieżki
- $permanent - ustawia przekierowanie 301
- $anchor - to co ma być na końcu ścieżki po znaku #
redirect('admin-install-action-id',array('action'=>'actionName','id'=>10),true)
back($request,$anchor = 'mp=admin.message.success')
Wraca na ścieżke z jakiej nastąpiło wywołanie w poprzednim kroku
- $request - zmienna $this->request otrzymana z poziomu kontrolera
- $anchor - to co ma być na końcu ścieżki po redirecie w formie zmiennej get lub anchora
back($this->request,'mp=admin.message.success')
reload($message = 'admin.message.success',$messageType = 'mp',$force = false)
Przeładowywuje aktualną stronę
- $message - zmienna komunikatu pobieranoego z kluczy językowych
- $messageType - typ wiadomości, mp - pozytywna, mn - negatywna
reload('admin.message.success','mp')