W dzisiejszym odcinku cyklu ZendFramework Quick Tip zajmiemy się wyjaśnieniem fenomenu parametrów, które „biorą się znikąd” podczas korzystania z helpera url
.
Wprowadzenie
Jak większość frameworków, ZF udostępnia helpery pomocnicze dla widoków. Jednym z takich helperów jest Zend_View_Helper_Url
, który służy do tworzenia adresu URL w ramach naszej aplikacji na bazie przekazanych parametrów. Warto z niego korzystać, ponieważ rozwiązuje problem prawidłowej ścieżki bazowej, kiedy nie używamy vhostów i nasza aplikacja umieszczona jest np. w katalogu http://example.com/some/folder/public/
Przykładowe wywołanie:
<?php
// application/views/scripts/foo.phtml
$this->url(array('controller' => 'foo', 'action' => 'bar', 'additional_param' => 123));
?>
wygeneruje adres: http://example.com/foo/bar/additional_param/123/
Jednakże, kiedy z poziomu www. strony spróbujemy wygenerować inny adres, np. tylko do kontrolera odpowiedzialnego za zarządzanie użytkownikami:
<?php
$this->url(array('controller' => 'users'))
?>
zamiast adresu http://example.com/users
otrzymamy http://example.com/users/bar/additional_param/123/
Ale dlaczego?
Otóż to, aby zrozumieć działanie wystarczy spojrzeć na implementację helpera:
class Zend_View_Helper_Url extends Zend_View_Helper_Abstract
{
public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
{
$router = Zend_Controller_Front::getInstance()->getRouter();
return $router->assemble($urlOptions, $name, $reset, $encode);
}
}
Pomijając pobieranie obiektu routera z kosmosu, najważniejsze są dla nas parametry, a konkretniej trzeci z nich: $reset
. Odpowiada on za zresetowanie obecnie ustawionych parametrów ścieżki. Jak widać, jego domyślną wartością jest false
– i to jest powód, dla którego w przedstawionym wcześniej przykładzie otrzymaliśmy dodatkowe parametry.
Rozwiązanie
Jak łatwo się domyślić, rozwiązanie jest bardzo proste – wywołanie powinno wyglądać tak:
$this->url(array('controller' => 'users'), null, true);
Oczywiście, pisanie wielu takich wywołań może być dla niektórych niewygodne. Dlatego możemy albo napisać własny helper, gdzie domyślnie ustawimy parametr na true.
Innym rozwiązaniem może być stworzenie helpera Zend_View_Helper_Url
i umieszczenie go w pliku APPLICATION_PATH . /views/helpers/Url.php
:
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...
Zwiń
Czytaj na blogu autora...