Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF]Przekierowywanie funkcją redirector
klapaucius
post
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Cieslix
post
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


jeśli jesteś w danej akcji kontrolera, to spokojnie możesz użyć:

  1. $this->_redirect('strona-glowna.html');
Go to the top of the page
+Quote Post
klapaucius
post
Post #3





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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"

Ten post edytował klapaucius 30.03.2013, 13:42:39
Go to the top of the page
+Quote Post
Cieslix
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
klapaucius
post
Post #5





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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! : )

Ten post edytował klapaucius 31.03.2013, 00:08:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:41