gru 20

Ostatnio zauważyłem ciekawy fragment kodu umieszczony w pliku boostrap.php. Uznałem go za całkiem ciekawy i godny uwagi przykład. Poniższy fragment kodu pokazuje jak w Zendzie zrealizować ruting, lub mówiąc inaczej pewne przekierowania i przyjazne linki. Jak dla mnie fajna sprawa. Wpakuję poniżej kilka linii kodu naraz i każdą opiszę z osobna. Resztę sobie sam przetestujesz metodą prób i błędów.

$routes[] = new Zend_Controller_Router_Route("zdjecia", array("controller" => "index", "action" => "panoramio"));
$routes[] = new Zend_Controller_Router_Route("czytaj/:title", array("controller" => "index", "action" => "detailarticle"));
$routes[] = new Zend_Controller_Router_Route("wiadomosci/:par", array("controller" => "index", "action" => "rss","site"=>1));
Zend_Controller_Front::getInstance()->getRouter()->addRoutes($routes);

Powyższy przykład jest może wyrwany z kontekstu (prosto z kodu :) ) więc chyba nie muszę tłumaczyć że raczej działać nie będzie, ale mam nadzieję, że pozwoli to wykorzystać go do własnych zastosowań.
W liniach od 1 do 3 generuję ruting dla zenda i zapamiętuję go w tablicy. Pierwsza linia mówi wszystko co w linku będzie miało odwołanie do kontrolera “zdjecia” przekieruj na kontroler Index do akcji Panoramio. Nie muszę tłumaczyć, że fizycznie taki kontroler jak “zdjecia” nie jest nam potrzebny i wcale go nie musimy mieć.

Linia numer 2 robi coś podobnego ale pojawia się tam element :par oraz oprócz nazwy kontrolera i akcji do kŧórej następuje przekierowanie istnieje jeszcze dodatkowy parametr site. Linia ta mówi Zendowi coś takiego: Link który zawiera nazwę kontrolera “wiadomości” przekieruj do kontrolera index oraz akcji rss, dodatkowy parametr który zostanie przekazany to parametr o nazwie “site” z wartościa 1. Oprócz tego przekazujemy jeszcze jeden parametr “:par“, czyli wszystko po wiadomosci/costam trafi do elementu “par“.
Jeżeli chcemy teraz odczytać w kontrolerze index i akcji rss zawartość elementów “costam” oraz “site” możemy zrobić np: coś takiego

$site = $this->_request->getParam('site');
$parametr = $this->_request->getParam('par');

Ostatnia linia kodu informuje Zend, że ma po prostu uaktywnić ruting tak aby zaczął on działać. Mam nadzieję, że będzie to działało gdyż wytargałem to bezpośrednio z kodu i sam tego używałem. O ile się nie mylę to operacje te powinny być wykonane zanim zend utworzy kontroler frontowy, czy coś takiego :)

Autor siema \\ tagi: , , , , , , , , , , , , , , ,



3 Odpowiedzi do “Ruting w zendzie zend Router_Route”

  1. Anonim napisał(a):

    Sorry, kolego, ale jeśli już piszesz tutka o czymś, to pofatyguj się sprawdzić podane przykłady tak, aby działały, a nie idziesz na “o(d)lew”.

  2. siema napisał(a):

    To jest wzięte z działającego kodu, podany jako przykład, więc chyba oczywiste jest, że dosłownie to działać nie będzie dopóki nie przystosujesz tego do własnych potrzeb. Po drugie nie rozumiem co mogło ci tu nie działać, no chyba że w samym Zendzie się coś zmieniło w tym kontekście od wersji 1.10 na której to było robione.

  3. marcin napisał(a):

    Raczej napisz, że ten kod ma się znaleść w pliku Bootstrap.php i tam
    protected function _initRoutes()
    {
    $front = Zend_Controller_Action::getFrontController();
    $router = $front->getRouter();
    $router->addRoute(‘kat’, new Zend_Controller_Router_Route(“kat/:id_kat”, array(“controller” => “index”, “action” => “pokazkat”, “id_kat” => 1)));
    }

    warto też napisać że dzięki temu urle automatycznie będą zmieniane:

    <a href="url(array(‘controller’ => ‘index’, ‘action’ => ‘pokazkat’, ‘id_kat’ => $idkatzczegośtam), ‘kat’, true); ?>”>kategoria