2009-08-26 12 views
6

zajrzyj na tę stronę www.fltdata.com Z jakiegoś powodu link do strony głównej bez względu na stronę, którą kierujesz, zamiast wskazywać stronę główną wskazuje na bieżącej stronie działa prawidłowo na moim localhost, ale zachowuje się jak jej on-line to href wartość linku domu jest po prostu.. $ this-> baseUrl()

Co złego tutaj ..

=== EDIT ===

Dobrze stworzyliśmy pomocnika, który jest jak poniżej:

class Zend_View_Helper_BaseUrl 
{ 
    protected $_baseUrl; 

    function __construct() 
    { 
     $fc = Zend_Controller_Front::getInstance(); 
     $this->_baseUrl = $fc->getBaseUrl(); 
    } 

    function baseUrl() 
    { 
     return $this->_baseUrl; 
    } 
} 

I to jest chyba to, co się nazywa, kiedy dzwonię do $ this-> baseUrl. Czy to może być problem - jednak działa dobrze w moim lokalnym hoście, a nie w sieci, więc - musi to być problem z konfiguracją - gdzie powinienem szukać?

Odpowiedz

15

Trudno powiedzieć, co się tutaj dzieje, nie wiedząc więcej szczegółów na temat konfiguracji ZF i e.h. urr-przepisywanie-konfiguracji. Logika stojąca za Zend_Controller_Request_Http::getBaseUrl() - to tutaj wywoływane jest twoje wywołanie Zend_View_Helper_BaseUrl::baseUrl(), jeśli nie jest ustawione jednoznacznie baseUrl w kontrolerze głównym - jest dość skomplikowana i obejmuje 4 różne zmienne serwera (i kilka innych w procesie określania bieżącego identyfikatora URI żądania) .

Najprostszą rzeczą do przezwyciężenia tego problemu może być ustawienie baseUrl (względem katalogu głównego serwera) na kontrolerze przednim w bootstrapie. Jeśli używasz nowego Zend_Application -bootstrapping będziesz musiał dodać

resources.frontController.baseUrl = "/subdir" 

do danej konfiguracji.

EDIT

Twój pomocnik mniej lub bardziej przypomina oryginalną baseUrl -helper dostarczonymi z ZF. Oryginalna wersja również jest zgodna z Zend_Controller_Front::getBaseUrl(). Z której wersji ZF korzystasz? Czy jest jakiś powód, dla którego nie używasz dostarczonego baseUrl -pomocy?

Czy próbowałeś jawnie ustawić baseUrl w bootowaniu?

+0

Tam dużo na Zend jestem całkiem nieświadomy :(- Zamieściłem moją funkcję pomocnika - tam jest coś źle – Ali

+0

Właściwie dopiero po tutorialu a? budowa strony z tego - nie sądzę, że ustawiam baseUrl w moim pliku bootstrap w dowolnym miejscu. – Ali

+0

Czy próbowałeś jawnie ustawić baseUrl? Jaki jest rezultat? Czy próbowałeś używać dostarczonego narzędzia baseUrl-helper? Jaki jest rezultat? –

6

Zwykle używam obiekt konfiguracyjny dla bazowego adresu URL, a następnie zdefiniować go w index.php w publicznym/index.php

$config = new Zend_Config_Ini(
     APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV); 
    $baseUrl = $config->baseHttp; 
    define('BASE_URL', $baseUrl);` 

w configs/application.ini mam to na mocy sekcji produkcyjnej

[production] 
baseHttp       = "http://whatever.net" 

w ten sposób, jeśli kiedykolwiek trzeba użyć innej bazy url w developerski mogę tylko dodać diiferent zmienną dla baseHttp osobiście myślę, że jeśli chcesz a baseurl nie dać się zawiłe, że jest to prostsze podejście niż owijania w własną klasę. Czasami OOP to zbyt dużo OOP. Dodatkowo ułatwiłoby to program instalacyjny. Możesz nawet pobrać zmienną $ _SERVER, aby uzyskać nazwę hosta i opakować ją pod adresem http: //

4

Zend Framework zawsze zwraca bieżącą stronę, ponieważ nie używasz końcowego ukośnika po wywołaniu $ this-> baseUrl();.

Aby rozwiązać problem, dołącz końcowy ukośnik po wywołaniu $ this-> baseUrl(); w widoku tak:


Correct Way

<a href="<?php echo $this->baseUrl() . "/"; ?>">Home Link</a> 

lub

<a href="<?php echo $this->baseUrl(); ?>/">Home Link</a> 

Pomijając wyniki spływu ukośnymi linkiem do strony, którą” ponownie przeglądasz.

błędnym Way

<a href="<?php echo $this->baseUrl(); ?>">Home Link</a>