Tomasz Pupiec

Tomasz Pupiec programista, Webcode

Temat: Pytanie o routing

Witam

Zadałem to pytanie na forum zend-framework.pl ale bez odzewu. Może tutaj się uda :)

Standardowo w ZendFramework routing wykonywany jest na podstawie url. Czyli przykładowo http://localhost/jakisKontroler/jakasAkcja.

Moje pytanie jest, w jaki sposób skonfigurować router, tak aby można było tą część urla "jakisKontroler/jakasAkcja" podawać np. jako parametr wywołania POST ?

Czyli url byłby http://localhost/index.php a dodatkowo w wywołaniu POST miałbym np parametr $_POST['page_id'] = "jakisKontroler/jakasAkcja"

Pozdrawiam

konto usunięte

Temat: Pytanie o routing

cos czuje, ze tu chodzi o zwykly redirect
Piotr Rybałtowski

Piotr Rybałtowski Programista PHP,
Symfony, Zend
Expressive, Node.js

Temat: Pytanie o routing

localhost/jakisKontroler/jakasAkcja jest przepisywany do tablicy parametrów (przy standardowych ustawieniach) array('module'=>'default','controller'=>'jakisKontroler','action'=>'jakasAkcja');

Jeśli dobrze zrozumiałem, to można spróbować w POST wysłać pola controller i action. Pytanie tylko czy front controller pobiera te parametry tylko user params czy też z POST, ale ja tego w tej chwili nie mam jak przetestować. Poproszę o wyniki, bo nawet jestem ciekawy. :)

A jak nie zadziała, to można własny front controller napisać ze zmienioną metodą pobierania parametrów kontroli akcji.

Temat: Pytanie o routing

<input type="hidden" name="_controller" value="nazwa kontrolera" />
<input type="hidden" name="_action" value="nazwa akcji" />

Potem metoda init w kontrolerze
public function init()
{
$this->_forward($this->_getParam('_action'), $this->_getParam('_controller'))
}

+ do tego jakieś sprawdzanie warunków i inne potrzebne rzeczy.
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Pytanie o routing

Przychodzą mi do głowy 4 sposoby:

Pierwszy:
Przy wykorzystaniu standardowych routerów i requestów trudno coś takiego zrobić. Możesz, jak wyżej Andrzej napisał, przekierować ruch do konkretnego kontrolera i konkretnej akcji i w niej po raz drugi przekierowywać request na podstawie danych w POST już do kontrolera docelowego.

Drugi:
Napisać swój router - ale to chyba za duża armata na Twoją muchę ;)

Trzeci:
Napisać swoją implementację Zend_Controller_Request_Interface która przetłumaczy dane z POST na adres URI.

Czwarty:
Napisać swoją implementację Zend_Controller_Router_Route_Interface która z Routera będzie wybierać interesujące Cię pole i następnie na jego podstawie przeprowadzać analizę, czy dane pasują do zadanej drogi.
Sergiusz Świeszczak

Sergiusz Świeszczak Architekt Systemów

Temat: Pytanie o routing

Moim zdaniem wystarczy, że w kontrolerze odbierzesz wartości zmiennych w ten sposób:


$this->controllerName = $this->_request->getControllerName();
$this->moduleName = $this->_request->getModuleName();
$this->actionName = $this->_request->getActionName();

Następna dyskusja:

Routing - kilka pytań




Wyślij zaproszenie do