Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej Rozumiem

Router

Router pozwala nam przypisać do danej ścieżki wywołanej przez użytkownika zachowanie systemu. Na pdostawie ścieżki system wie na jaki kontroller ma skierować ruch a także przy pomocy klasy router.class.php znajdującej się w core pozwala nam na wykonywanie przekieorwań do innych kontrollerów po nazwie routingu.

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.
  1. 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.
  2. W 2 wierszu mamy nazwę routingu która posłużyć może do wywołania danego adresu przy pomocy routera w naszym kontrolerze.
  3. 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 #
Przykład zastosowania dla
[/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')

Centrum pomocy

Masz problem techniczny?

Poradniki wideo