Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Przekierowywanie funkcją redirector
Forum PHP.pl > Forum > PHP > Frameworki
klapaucius
Witam. Przejdę do rzeczy:
w pliku application.ini mam zdefiniowaną następującą tanslację adresu:
Kod
resources.router.routes.stronaglowna.route = "strona-glowna.html"
resources.router.routes.stronaglowna.defaults.controller = "index"
resources.router.routes.stronaglowna.defaults.acion = "index"


I teraz z pewnej jakiejś tam akcji chcę zrobić przekierowanie na stronę główną. I moje pytanie brzmi jak to zrobić, aby przekierowywało mi ładnie na adres moj-projekt/public/strona-glowna.html

Bo jeśli robię to przekierowanie w sposób następujący:
  1. $this->_helper->redirector('index', 'index');

To otrzymuję przekierowanie na adres moj-projekt/public/index/index
Cieslix
jeśli jesteś w danej akcji kontrolera, to spokojnie możesz użyć:

  1. $this->_redirect('strona-glowna.html');
klapaucius
Cytat(Cieslix @ 30.03.2013, 12:38:05 ) *
jeśli jesteś w danej akcji kontrolera, to spokojnie możesz użyć:

  1. $this->_redirect('strona-glowna.html');

No dobrze, a co w przypadku gdy będę chciał zmienić coś w pliku application.ini, np. adres zewnętrzny z 'strona-glowna.html' na 'inna-nazwa.html'?
Wtedy jak mniemam, będę musiał w każdym pliku (gdzie tylko użyłem przekierowania) zmieniać nawe adresu, a to jednak nie o to chodzi. Po to używam frameworka, aby mieć wszystko z automatu : )

Teraz jednak mnie olśniło by zrobić taką sztuczkę:
  1. $adres = $this->view->url(array(), 'stronaglowna'); ///ustalamy adres na podstawie funkcji url widoku, podając regułę translacji
  2. $baseName = basename($adres); ////pobieramy samą nazwę adresu zewnętrznego
  3. $this->redirect($baseName); ///robimy przekierowanie

I nawet działa to : ) Waszym zdaniem rowziązanie to jest optymalne, czy istnieje jakiś prostrzy sposób?

@edit2:
Doszedłem do wniosku jednak, że rozwiązanie to nie jest do końca dobre, gdyż nie będzie działać w przypadku adresu zewnętrznego podobnego np. do tego: "folder/strony/glownastrona.html", bo wtedy funkcja basename usunie mi wszystkie slash'e i zostanie mi tylko nazwa "glownastrona.html"
Cieslix
Cytat(klapaucius @ 30.03.2013, 13:38:39 ) *
No dobrze, a co w przypadku gdy będę chciał zmienić coś w pliku application.ini, np. adres zewnętrzny z 'strona-glowna.html' na 'inna-nazwa.html'?
Wtedy jak mniemam, będę musiał w każdym pliku (gdzie tylko użyłem przekierowania) zmieniać nawe adresu, a to jednak nie o to chodzi. Po to używam frameworka, aby mieć wszystko z automatu : )


trochę Ciebie nie rozumiem
jak masz taki routing ustawiony:
  1. resources.router.routes.stronaglowna.route = "/strona-glowna.html"
  2. resources.router.routes.stronaglowna.defaults.controller = "index"
  3. resources.router.routes.stronaglowna.defaults.acion = "index"


i ustalasz sobie wszystkie linki następująco:

  1. $this->view->url(array(), 'stronaglowna');


jak będziesz chciał zmienić adres strony głównej to w application.ini zmieniasz
  1. resources.router.routes.stronaglowna.route = "/strona-glowna.html"
  2. resources.router.routes.stronaglowna.defaults.controller = "innykontroler"
  3. resources.router.routes.stronaglowna.defaults.acion = "innaakcja"


ja przynajmniej w taki sposób routing używam
klapaucius
No tak. Masz w pełni rację.
Ale jak we wcześniejszym poście napisałeś, jeśli chcę zrobić przekierowanie za pomocą $this->_redirect('strona-glowna.html');, to jako parametr tej metody nie podaję nazwy reguły translacji (w moim przypadku miałaby ona nazwe "stronaglowna") ani też nazwy akcji czy kontrolera, ale bezpośredni, zewnętrzny adres url (strona-glowna.html). I mój problem polega na tym, jak uzyskać dostęp do tego zewnetrzenego adresu(strona-glowna.html), podając funkcji przekierywującej jedynie nazwę translacji(stronaglowna).

Jeśli jest to ciągle niezrozumiałe o co mi chodzi, to może zapytam jeszcze o coś innego:

Robię sobie takie przekierowanie:
  1. $this->redirect($this->view->url(array(), 'stronaglowna'));

Jednak wtedy błędnie przekierowuje mnie, gdyż zostaję przerzucony na stronę o adresie: moj-projekt/public/moj-projekt/public/strona-glowna.html.
Jak więc zrobić, aby przekierowywało mnie poprawnie?

(tak jak wcześniej pokazałem, można użyć funkcji basename(), która z wartości zwracanej przez funkcję url pozostawia jedynie samą cząstkę "strona-glowna.html", ale nie sprawdzi się to w przypadku, jeśli moj adres w regule translacji bedzie mial wartosc powiedzmy "costam/costam/strona-glowna.html" - bo wtedy usunie wszystkie slash'e".

Jeśli piszę za bardzo chaotycznie to przepraszam, inaczej nie potrafie. Mam nadzieje ze sie połapiecie o co mi chodzi : )

@edit

Dobra uporałem się z tym. Jeśli kogoś interesuje jak:
  1. $this->_redirector = $this->_helper->getHelper('Redirector');
  2. $this->_redirector->gotoRoute(array(), 'stronaglowna');


Dziękuję, pozdrawiam! : )
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.