2015-09-24 38 views
10

Używam Zend F/W 1.12 w celu zbudowania serwera REST. Jednym z moich wymagań jest posiadanie działania wykraczającego poza granice tego, co Zend może rozpoznać jako działanie "Restfull". Chodzi mi o to, że chciałbym mieć akcję, która jest nazywana czymś w rodzaju mymedia i chciałbym trasować żądania skierowane do // mymedia. Obecnie Zend rozumie to jako identyfikator dla getAction i oczywiście to nie jest to, czego chcę.Dodawanie niestandardowej trasy do kontrolera Zend REST

Każda pomoc będzie wysoko ceniona! Dzięki

Odpowiedz

0

Kiedyś napisałem niestandardową trasę dla Zend Framework 1, która może obsłużyć niestandardowe spokojne trasy. dobrze mi to służyło do tej pory. Aby uzyskać więcej informacji, patrz https://github.com/aporat/Application_Rest_Controller_Route.

na przykład, jeśli chcesz mieć url takich jak /users/30/messages odwzorowaną poprawnie w akcji kontrolera Zend użyć tej trasy w swoim bootstrap:

$frontController = Zend_Controller_Front::getInstance(); 
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages'])); 
+0

chociaż nie jest to dokładnie odpowiedź to udało mi punkt właściwy kierunek, dzięki! ostatecznie dodałem kolejny Zend_Route ze stałym kontrolerem, modułem i akcją. – Alon1980

+0

Niestety wygląda na to, że repozytorium nie jest już dostępne, więc link jest zepsuty. –

3

Implementacja Zend_Rest_Route nie pozwala na wiele dostosowań, ale zamiast tego zapewnia podstawowy schemat routingu dla gotowego użycia.

Jeśli więc chcesz zmienić sposób interpretacji identyfikatorów URI, możesz rozszerzyć klasę Zend_Rest_Route, Zend_Controller_Router_Route_Module lub Zend_Controller_Router_Route_Abstract, aby utworzyć własny rodzaj routingu.

Zapoznaj się z metodą tych klas i ich działaniami, np. . wypełniają macierz właściwości $_values (z zachowaniem właściwości , $_controllerKey i $_actionKey).

Następnie można go dodać, np. jako pierwszej trasy w swojej klasie bootstrap:

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter(); 
$router->addRoute('myRoute', new My_Route($frontController)); 
$router->addRoute('restRoute', new Zend_Rest_Route($frontController)); 

zobacz:

http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.controller.router.basic

Routing jest to prosty proces iteracji wszystkich przewidzianych trasach i dopasowanie jej do definicji bieżącego żądania URI. Po znalezieniu dopasowania dodatniego wartości zmiennych są zwracane z instancji Route i są wprowadzane do obiektu Zend_Controller_Request w celu ich późniejszego wykorzystania w module rozsyłającym, a także w kontrolerach utworzonych przez użytkownika. Przy wyniku z wynikiem ujemnym sprawdzana jest następna trasa w łańcuchu.