Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Przyjazne URL'e w formacie jakis_tekst,1,1,1,1.html
Forum PHP.pl > Forum > PHP > Frameworki
sanneo
Witam.

Próbuję znaleźć rozwiązanie mojego problemu.

Chciałbym, aby poniższy przykładowy URL działał w Zend Framework:

http://localhost/kategorie,1,1,1.html


Powyższy URL tłumaczy się na:

http://localhost/dowowolny_tekst,id_kontro...d_elementu.html

Rozszerzona wersja tego URL'a jest taka:

http://localhost/kategorie,1,1,1,1.html

To oznacza:

http://localhost/dowowolny_tekst,id_kontro..._podstrony.html

Przykładowe URL'e:

http://localhost/informatyka,15,29,735,2.html oznacza: kontroler o ID: 15, akcja o ID: 29, element o ID: 735, podstrona: 2

http://localhost/ekologia,4,13,59,7.html oznacza: kontroler o ID: 4, akcja o ID: 13, element o ID: 59, podstrona: 7

http://localhost/teologia,3,2,7.html oznacza: kontroler o ID: 3, akcja o ID: 2, element o ID: 7, podstrona: 1


Poza Frameworkiem udało mi się obsłużyć takie adresy, ale jak to zrobić w Zend Framework?

Prosiłbym o opis w dwóch wersjach w pliku application.ini i w Bootstrap.php

Pozdrawiam.
Mariusz (sanneo)
sanneo
Witam.

Poradziłem z tym sobie pisząc poniższy kod:

  1. protected function _initRouter(){
  2. $zcf = Zend_Controller_Front::getInstance();
  3. $router = $zcf->getRouter();
  4. $route = new Zend_Controller_Router_Route_Regex(
  5. '([a-zA-Z0-9_]+),?(\d?),?(\d?),?(\d?),?(\d?)\.html',
  6. 'controller' => 'index',
  7. 'action' => 'edit'
  8. ),
  9. 1 => 'text',
  10. 2 => 'id_controller',
  11. 3 => 'id_action',
  12. 4 => 'id_element',
  13. 5 => 'id_strony'
  14. )
  15. );
  16. $router->addRoute('my-route', $route);
  17. return $router;
  18. }


Jest to prawie OK.

Ale jak wynika z mojego problemu potrzebuję pierwszy id (id_kontrolera) "przetłumaczyć" na "nazwę kontrolera".

W jaki sposób i w którym miejscu?

Pozdrawiam.
Mariusz (sanneo)
Diwi
Możesz mi wytłumaczyć ten koncept, bo niestety nie rozumiem, prawdopodobnie mylisz pojęcia kontroler z czymś innym. Mógłbyś napisać dokładnie co chcesz osiągnąć, np. jaką treść chcesz wyświetlić pod jakimś przykładowym linkiem?
kalipek
kontroler -> metoda init:

  1. $zcf = Zend_Controller_Front::getInstance();
  2. $zcf->id_controller = $this->_setParam('id_controller', 'tutaj cyfra z id jaki ma mieć dany kontroler');




o to Ci chodzi?
sanneo
Witam.

@Diwi

Jak wiemy URL w Zendzie ma następującą strukturę: domena/{moduł}/kontroler/akcja/dowolne_zmienne

Ja chcę strukturę w której ukośniki będą zamienione na przecinki, a zamiast nazw elementów MVC chcę aby były ich ID.


Kilka "konkretnych" URL'i (zwróć proszę uwagę szczególnie na 4 URL):

1)

http://localhost/samochody,1,1,5.html

Ma wyświetlić kategorię o ID: 5

Kontroler: kategoria (1)
Akcja: wyswietl (1)
ID kategorii: 5 (5)

Jest to tożsame z czymś takim w Zend:

http://localhost/kategoria/wyswietl/id/5


2)

http://localhost/kontakt,2,1,0.html

Kontroler: kontakt (2)
Akcja: formularz (1)
ID kategorii: 0 (5)

Jest to tożsame z czymś takim w Zend:

http://localhost/kontakt/formularz/


3)

http://localhost/Lamborghini,3,1,95.html

Kontroler: samochod (3)
Akcja: wyswietl (1)
ID samochodu: 95 (95)

Ma wyświetlić informacje o samochodzie Lamborghini, którego ID w bazie danych, to 95

Tożsame z:

http://localhost/samochod/wyswietl/id/95


4)

http://localhost/Lamborghini,3,2,95.html

Kontroler: samochod (3)
Akcja: edytuj (2)
ID samochodu: 95 (95)

Ma pozwolić na edycję informacji o samochodzie Lamborghini, którego ID w bazie danych, to 95

Tożsame z:

http://localhost/samochod/edytuj/id/95



@kalipek

Nie, to nie o to chodzi.

Mam 9 kontrolerów i około 50 akcji, potrzebuję to zapisać w URL'ach za pomocą liczb.

Dla 1 kontrolera i 1 akcji, mój kod się sprawdza.

Ale jak obsłużyć 9 kontrolerów i 50 akcji?

Z mojego gdybania wynika, że musiałbym ten mój kod do zmiany routingu zapisać wielokrotnie i dodać go do routera, a że liczba kontrolerów i akcji jest bardzo duża, to wydaje mi się to słabym pomysłem, może jest lepszy na to sposób?

Kontrolery, które mam utworzone za pomocą zf_bat:

account
car
cart
category
index
information
notifications
rss
search

Każdy z nich będzie miał swoje akcje.

Pozdrawiam.
Mariusz (sanneo)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.