Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Baseurl
kasztan165
post 25.01.2011, 09:40:11
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.07.2007

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


Witam,

Chciałem się dowiedzieć jak ustawić w tworzonej aplikacji na ZF baseurla. W tej chwili mój baseurl jest taki:
Cytat
/zf-test

a chciałbym aby był to pełny adres, czyli:
Cytat

Czy jest możliwość ustawienia tego za pomocą helpera, czy innym rozwiązaniem jest utworzenie stałej??

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
singles
post 25.01.2011, 13:58:18
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

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


Kawałek kodu z Zend_View_Helper_BaseUrl:
  1. public function setBaseUrl($base)
  2. {
  3. $this->_baseUrl = rtrim($base, '/\\');
  4. return $this;
  5. }
  6.  
  7. /**
  8.   * Get BaseUrl
  9.   *
  10.   * @return string
  11.   */
  12. public function getBaseUrl()
  13. {
  14. if ($this->_baseUrl === null) {
  15. /** @see Zend_Controller_Front */
  16. require_once 'Zend/Controller/Front.php';
  17. $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
  18.  
  19. // Remove scriptname, eg. index.php from baseUrl
  20. $baseUrl = $this->_removeScriptName($baseUrl);
  21.  
  22. $this->setBaseUrl($baseUrl);
  23. }
  24.  
  25. return $this->_baseUrl;
  26. }


Pierwsza metoda wskazuje na to, że można to ustawić dla helpera. Kod drugiej metody wskazuje na to, że domyślnie baseUrl pobierany jest z instancji FrontControllera. Jak podejrzysz kod, to zobaczysz że można go [baseUrl] też tam ustawić.

PS. Pozwolę sobie zapytać - dlaczego chcesz chcesz, aby baseUrl zwracał Ci localhost? Jak przeniesiesz aplikację na innego hosta, to będziesz musiał zmieniać baseUrl (czy tam w bootstrapie czy w konfiguracji).



--------------------
Works for me => u mnie działa - blog o (o)programowaniu i nie tylko
meet.php - darmowe meetupy związane z PHP
Go to the top of the page
+Quote Post
kasztan165
post 25.01.2011, 15:07:14
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.07.2007

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


Problem jest taki, że czy to jest dobre rozwiązanie czy nie w tej aplikacji wymagany jest pełny adres. Gdy próbuję ustawić baseurla w bootstrapie w poniższy sposób nie uruchamiają się poszczególne podstrony.

  1. protected function _initRoutesAndControllers() {
  2. $frontController = Zend_Controller_Front::getInstance();
  3. $frontController->setBaseUrl('http://localhost/zf-test');
  4. }

Co robię źle?
Go to the top of the page
+Quote Post
singles
post 26.01.2011, 10:19:07
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

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


Obadałem problem. Robisz dobrze, ale u mnie jak zrobię tak samo jak Ty to Zend szaleje (przez nazwę hosta na początku), ACL się wysypuje, bo Request źle zwraca nazwę kontrolera i akcji itd.

Sposób jaki wymyśliłem, aby to obejść - napisałem własny router (kto wie, może mi się kiedyś przyda), który pomaga Zendowi w ogarnięciu co jest czym w linku:
  1. class My_Router extends Zend_Controller_Router_Rewrite
  2. {
  3. public function route(Zend_Controller_Request_Abstract $request)
  4. {
  5. parent::route($request);
  6.  
  7. $host = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['SERVER_NAME'];
  8. $baseUrlParts = explode('/', str_replace($host, '', $request->getBaseUrl()));
  9. $pathParts = explode('/', $_SERVER['REQUEST_URI']);
  10.  
  11. $controllerAndAction = array_merge(array_diff($pathParts, $baseUrlParts));
  12.  
  13. if (!isset($controllerAndAction[0])) {
  14. $controllerAndAction[0] = $this->getRoute('default')->getDefault('controller');
  15. }
  16. if (!isset($controllerAndAction[1])) {
  17. $controllerAndAction[1] = $this->getRoute('default')->getDefault('action');
  18. }
  19. $request->setControllerName($controllerAndAction[0]);
  20. $request->setActionName($controllerAndAction[1]);
  21. }
  22. }


A w Bootstrapie mam coś takiego:
  1. protected function _initBaseUrlAndRoutes()
  2. {
  3. /**
  4.   * @var Zend_Controller_Front
  5.   */
  6. $front = $this->bootstrap('frontcontroller')->getResource('frontcontroller');
  7. $front->setBaseUrl('http://localhost/projekt/public/'); //albo "mojhost/zf/"
  8. $front->setRouter(new My_Router());
  9. }


U mnie działa - helper baseUrl zwraca pełną ścieżkę, a i na ACLu się nie wysypuje.

Teoretycznie powinno się dać zrobić to także za pomocą mod_rewrite - ustawić RewriteBase, ale nie znam się na tyle na mod_rewrite, żeby się wypowiadać.

Ten post edytował singles 26.01.2011, 13:11:45


--------------------
Works for me => u mnie działa - blog o (o)programowaniu i nie tylko
meet.php - darmowe meetupy związane z PHP
Go to the top of the page
+Quote Post
Pilsener
post 26.01.2011, 10:23:05
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Nie trzeba nawet robić rewrite'a, wystarczy założyć domenę na localhoście i ZF przestanie się burzyć.
Go to the top of the page
+Quote Post
singles
post 26.01.2011, 11:15:50
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

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


Cytat(Pilsener @ 26.01.2011, 10:23:05 ) *
Nie trzeba nawet robić rewrite'a, wystarczy założyć domenę na localhoście i ZF przestanie się burzyć.

Szczerze mówiąc, nie bardzo rozumiem co masz na myśli pisząc "domenę na localhoście" - chyba masz na myśli vhosta.

A jeśli masz na myśli vhosta, to właśnie sprawdziłem (http://mojvhost/projekty/zf), i po mojej stronie to też nie rozwiązuje problemu.

Jeśli nie masz na myśli vhosta, to z chęcią dowiem się, jak rozwiązać ten problem inaczej, bo szczerze mówiąc moje rozwiązanie też do końca mi się nie podoba.

Ten post edytował singles 26.01.2011, 11:18:26


--------------------
Works for me => u mnie działa - blog o (o)programowaniu i nie tylko
meet.php - darmowe meetupy związane z PHP
Go to the top of the page
+Quote Post
kasztan165
post 27.01.2011, 10:10:04
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 18.07.2007

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


Więc jednak chyba najprostszym rozwiązaniem będzie ustalenie stałej w bootstrapie.
Go to the top of the page
+Quote Post
melkorm
post 27.01.2011, 11:16:01
Post #8





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


a dlaczego pakujesz domenę do baseUrl'a? Baseurl jest wykorzystywany do mapowania Twojej aplikacji w podfolderach, czyli:

Kod
; przykłądowe Wartości w pliku application.ini dla określonych pathów do strony
; ja trzymam index.php w public, nie wiem jak Ty
; http://localhost/cokolwiek/public/
resources.frontController.baseUrl = "/cokolwiek/public/"
; http://doemna.pl/
resources.frontController.baseUrl = ""
; itp


a sam używam takiego czegoś (w bootstrapie):
  1. protected function _initBaseurl()
  2. {
  3. $baseurl = trim(dirname($_SERVER['SCRIPT_NAME']),'/');
  4. $this->bootstrap('FrontController');
  5. $r = $this->getResource('FrontController');
  6. if( $baseurl )
  7. {
  8. $r->setBaseUrl( '/' . $baseurl . '/' );
  9. }
  10. else
  11. {
  12. $r->setBaseUrl('');
  13. }
  14. }


Chociaż jakoś liczyć na 100% na to nie można, najlepiej ustawiać w Bootstrapie, ale w 99% działa :]


--------------------
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.06.2025 - 22:59