Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Rewrite
Nightmare
post 29.05.2007, 21:49:59
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 1
Dołączył: 21.05.2007

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


Czy mógłby mi ktoś wytłumaczyć na jakiej zasadzie działa rewrite w frameworku Zenda? Chodzi mi o adresy w postaci www.domena.com/nazwakontrolera/nazwaakcji

//--EDIT--//
Nie wiem dlaczego temat został przeniesiony do innego działu bo bynajmniej nie chdozi mi o to jak wykorzystywać ZF ale o to w jaki sposób ZF tworzy wirtualne katalogi. Czy są to poprostu zmienne z adresu przepisane prze ModRewrite ?

Ten post edytował Nightmare 29.05.2007, 22:19:54
Go to the top of the page
+Quote Post
kwiateusz
post 30.05.2007, 07:02:35
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Przeniesiono bo temat dotyczy ZF...

A co do adresu to podejrzewam ze jak w CI pathinfo" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
LBO
post 30.05.2007, 11:11:57
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(kwiateusz @ 30.05.2007, 08:02:35 ) *
A co do adresu to podejrzewam ze jak w CI pathinfo" title="Zobacz w manualu PHP" target="_manual


Nie smile.gif Zend_Uri[_Http]
Go to the top of the page
+Quote Post
Nightmare
post 30.05.2007, 12:19:14
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 1
Dołączył: 21.05.2007

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


Ale jeśli chciałbym napisać funkcje, która działa podobnie tak ja ta w ZF to nie moge po prostu zrzucić adresu do stringu i na nim operować ponieważ adres www.domena.com/nazwakontrolera/nazwaakcji otworzy mi po prostu katalog nazwaakcji zamiast uruchomic kontroler nazwakontrolera i wykonać metode nazwaakcji. Chyba, że to ja nie zrozumiałem założeń tejże funkcji w ZF.
Go to the top of the page
+Quote Post
LBO
post 30.05.2007, 14:05:04
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


O to metoda Zend_Controller_Request_Http::setRequestUri(), która jest odpowiedzialna za zczytanie adresu url wywołania.
  1. <?php
  2. /**
  3.  * Set the REQUEST_URI on which the instance operates
  4.  *
  5.  * If no request URI is passed, uses the value in $_SERVER['REQUEST_URI'], 
  6.  * $_SERVER['HTTP_X_REWRITE_URL'], or $_SERVER['ORIG_PATH_INFO'] + $_SERVER['QUERY_STRING'].
  7.  * 
  8.  * @param string $requestUri 
  9.  * @return Zend_Controller_Request_Http
  10.  */
  11. public function setRequestUri($requestUri = null) 
  12. { 
  13. if ($requestUri === null) { 
  14. if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
  15. $requestUri = $_SERVER['HTTP_X_REWRITE_URL']; 
  16. } elseif (isset($_SERVER['REQUEST_URI'])) { 
  17. $requestUri = $_SERVER['REQUEST_URI']; 
  18. } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
  19. $requestUri = $_SERVER['ORIG_PATH_INFO'];
  20. if (!empty($_SERVER['QUERY_STRING'])) {
  21. $requestUri .= '?' . $_SERVER['QUERY_STRING'];
  22. }
  23. } else { 
  24. return $this; 
  25. } 
  26. } elseif (!is_string($requestUri)) {
  27. return $this;
  28. } else {
  29. // Set GET items, if available
  30. $_GET = array();
  31. if (false !== ($pos = strpos($requestUri, '?'))) {
  32. // Get key => value pairs and set $_GET
  33. $query = substr($requestUri, $pos + 1);
  34. parse_str($query, $vars);
  35. $_GET = $vars;
  36. }
  37. }
  38.  
  39. $this->_requestUri = $requestUri; 
  40. return $this;
  41. }
  42. ?>

Narobione jest tam troche zamieszania, ponieważ różne serwery (w różnych konfiguracjach) trzymają url w troche innych miejscach w tablicy $_SERVER. Dla Apache string z tym url'em zapisany jest w $_SERVER['REQUEST_URI'].

edit:

Mając na myśli url, myślałem o części adresu po domenie np. www.domena.pl/folder/plik.php/folder_fake/podfolder_fake/?zmienna_w_tablicy_get=jej_wartosc to $_SERVER['REQUEST_URI'] będzie zawierać /folder/plik.php/folder_fake/podfolder_fake/?zmienna_w_tablicy_get=jej_wartosc.

Ten post edytował LBO 30.05.2007, 14:09:40
Go to the top of the page
+Quote Post
Nightmare
post 30.05.2007, 17:21:25
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 1
Dołączył: 21.05.2007

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


I to zadziała w przypadku wpisania dowolnego wirtualnego katalogu do adresu ?
Go to the top of the page
+Quote Post
LBO
post 30.05.2007, 17:33:52
Post #7





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


owszem, powinno... chociaż co jakiś czas Apache mi sie pieprzy i przy wirtualnym adresie pokazuje "No input file specified".

edit:
Ale na serwerach produkcyjnych ten błąd chyba nie występuje.

Ten post edytował LBO 30.05.2007, 17:34:34
Go to the top of the page
+Quote Post
Nightmare
post 30.05.2007, 17:42:17
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 1
Dołączył: 21.05.2007

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


Nie chce zaśmiecać forum więc nie będę tworzył osobnego topicu. A więc czytając pewien post na tym forum napisałem coś takiego.
  1. <?php
  2. $params = array();
  3. $defaultPath = '/index';
  4. $_SERVER['PATH_INFO'] = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : $defaultPath;
  5. $params = explode('/', substr($_SERVER['PATH_INFO'], 1));
  6. print_r($params);
  7. ?>

Całość znajduje się w pliku test.php I teraz adresy typu test.php/costam/costam działają, ale adresy typu /test/costam/costam juz nie. Czy jest jakiś sposób aby usunąć rozszerzenie z adresu?
Go to the top of the page
+Quote Post
LBO
post 30.05.2007, 20:44:30
Post #9





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


mod_rewrite


edit:
ewentualnie w dyrektywach serwera ustawić, by pliki bez rozszerzenia traktować jak pliki php.

Ten post edytował LBO 30.05.2007, 21:04:06
Go to the top of the page
+Quote Post
Nightmare
post 31.05.2007, 13:14:47
Post #10





Grupa: Zarejestrowani
Postów: 45
Pomógł: 1
Dołączył: 21.05.2007

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


Ale co w takim razie z $_GET Jak przesłać tablice $_GET bez jej wyświetlania w adresie? Czy wogóle jest to możliwe. Czytam z $_GET nazwy method i ich parametry, które są przesyłane wraz z kliknięciem w link. Czy jest jakiś inny sposób aby przesłać te parametry po kliknięciu w link?
Go to the top of the page
+Quote Post
LBO
post 31.05.2007, 13:28:12
Post #11





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Teoretycznie $_GET powinno być nadal dostępne, nawet przy programistycznym rewrite...

edit:
Jakoś przypadkiem wróciłem do tego tematu, ponownie przeczytałem Twoją ostatnią wypowiedź i już rozumiem.

Tablica $_GET nie jest tablicą tylko do odczytu (read-only), możesz sam dodawać do niej wartości, jakbyś przeczytał kawałek kodu ZF, który zapostowałem wcześniej sam być to zauważył.

Ten post edytował LBO 5.06.2007, 12:45:41
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 12:01