2010-11-27 15 views
0

Ich arbeite derzeit mit Zend für mein Projekt. Dieses Projekt hatte Kategorien. Normalerweise würde ich die URLs mit Zend-Routen umschreiben, damit ich meine Seite wie folgt erreichen kann: http: //site.ext/category/ [category-name] /. Aber für SEO-Zwecke möchte ich Root-Level-URLs erstellen. Mit anderen Worten: http: //site.ext/ [category-name] /.Zend: Route auf 'root' Ebene

Aber natürlich wird Zend versuchen, einen Controller namens [category-name] zu finden. Was ist der beste Weg, um dieses Problem zu umgehen? Ich habe an so etwas wie einen Fallback-Controller gedacht. Falls die Seite nicht gefunden wird, sollte der Callback-Controller die Anfrage bearbeiten und prüfen, ob die Kategorie existiert. Wenn nicht: Weiter zum Fehler-Controller.

Ist dies die beste Lösung, und was ist die Meinung meiner Kollegen Programmierer?

Mit freundlichen Grüßen,

Martijn

Antwort

0

Ich habe im Wesentlichen getan, was Sie vorgeschlagen haben. Ich habe Zend_Controller_Action erweitert und meine Routen zur Laufzeit in der init() definiert

Technisch hat es gut funktioniert. Ob es effizient war oder die bestmögliche Lösung, weiß ich nicht, aber es hat gut für mich funktioniert.

0

Verwenden Sie nicht die Standardrouten des Routers - entfernen Sie sie und richten Sie Ihre eigenen ein.

0

Schließlich ging für ein Front-Controller-Plugin, das ist ein Ausschnitt des Codes, den ich derzeit verwende.

<?php 
class App_Controller_Plugin_Seo extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
    // Retreive request params (module/controller/action/<params>) 
    $params = $request->getParams(); 

    // Initiate categories model 
    $providers = new Application_Model_DbTable_Providers; 

    // Lookup provider 
    $provider = $providers->getProviderByUrl($params[ 'controller' ]); 

    // If the provider exists 
    if (! is_null($provider)) { 

     // Rewrite request 
     $request->setModuleName('default') 
       ->setControllerName('provider') 
       ->setActionName('view') 
       ->setParams(
        array(
         'url' => $params[ 'controller' ] 
        ) 
       ); 

     return; 

    } 

    return; 
} 
} 
?> 
Verwandte Themen