2009-05-27 4 views
0

Diese Frage zu this one verbunden istWie eine dynamische Standard für einen Schlüssel in einem Router festlegen, Zend Framework

Wie kann ich den Standard der Kategorie Teils setze die Kategorie Wert in der Anfrage-URL zu sein?

$Router=$this->_front->getRouter(); 
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*', 
      array(
       'controller' => 'index', 
       'action'  => 'index', 
       'category' => 'aaa' 
      )); 
$Router->addRoute('category', $CategoryRoute); 

Mit anderen Worten, ich brauche den Wert [aaa] der Wert der Kategorie in der Zeit zu sein, die ich diesen Weg bin Gebäude. Es wird immer einen Wert für [Kategorie] geben, da sonst die Standardroute verwendet wird.

Beispiel von dem, was ich meine:
Wenn ich auf die Website surfen mit url http://baseurl/category/mycat/index
I = Index an der Steuerung geleitet werden wird, action = Index, Kategorie = mycat.
Aber in all meiner Ansicht nach Dateien, wo ich die Zend_View verwenden :: url() Helfer, zeigen die Links zu:
http://baseurl/category/aaa/somthing/somthing (Mit Hilfe der genauen Weg von oben)
Während ich sie tatsächlich brauchen, um zu zeigen:
http://baseurl/category/mycat/somthing/somthing

Dies passiert, weil der Standardwert für die Kategorie als Konstante in der Route geschrieben und irgendwie nicht von der aktuellen URL übernommen wird.
Ich löse dies derzeit, indem ich selbst die Kategorie aus der URL extrahiere und sie zum Standard mache.

+0

Könnten Sie mit einigen URLs klären und was funktioniert und nicht funktioniert? –

Antwort

0

Gibt es eine Frage in Ihrem Beitrag? :)

Wenn ich Sie richtig verstanden habe - yousetup Ihre Standard-Kategorie und es wird verwendet, wenn Sie

$this->url(array(),'category'); 

nennen Aber wenn man

$this->url(array('category'=>'my-category'),'category'); 

verwenden zurückgeben Kategorie/my-category/index/idnex statt kategorie/aaa/index/index

+0

Nein, ich werde immer url (array(), null, true); Der verwendete Router wird vom URI entschieden. Das funktioniert gut. Das Problem ist, dass der Helfer url() den Wert der Kategorie nicht von der URL übernimmt, sondern erwartet, dass ich ihn manuell in die Hilfs-URL eintrage (array ('category' => 'somevalue')); Das versuche ich zu vermeiden. Ich kann dies vermeiden, indem ich beim Erstellen der neuen Route einen Standardwert für [Kategorie] eingeben.Problem ist, es ist ein statischer Wert, wo es der Wert in URL sein muss. Ich löse das vorübergehend, indem ich mir den Wert von [Kategorie] entziehe und ihn zum Standard mache. –

+0

Dies sollte nicht passieren. Der letzte Parameter von url() schaltet "route reset" um - wenn es schnell oder nicht vorhanden ist, sollte die Route von der aktuellen URL aus gefüllt werden. Versuchen Sie, die verwendete Route abzulegen. (wie $ frontContr-> getRouter() -> ...) –

+0

* fast = false;) –

0

Wenn Sie

$this->url(array(), 'category'); 

verwenden sollte es funktionieren.

Aber denken Sie daran: Solange Sie sich an die Standardwerte halten, erhalten Sie immer eine einfache/Kategorie-Verknüpfung, aber wenn Sie andere Parameter verwenden, sollte die korrekt angepasste URL auf der aktuellen URI zurückgeben.

dh. wenn URI/category/aaa/index/index ist, dann $ this-> url (array(), 'category'); Gibt/category zurück, wenn URI/category/xxx/index/index ist, dann $ this-> url (array(), 'category'); Gibt/category/xxx zurück, wenn URI/category/xxx/index/process ist, dann $ this-> url (array(), 'category'); wird zurückgegeben/Kategorie/xxx/index/Prozess usw.

Verwandte Themen