2012-03-31 6 views
2

OK, ich bin ziemlich neu und durchpflüge alle Tutorials und beantworte Fragen, die ich finden kann. Leider konnte ich keine vollständige application.ini finden, die für mich funktioniert.Zend Framework application.ini Probleme des Routers

Irgendwo muss ich gestopft haben - ich kann das grundlegende Routing funktionieren OK, aber sobald ich versuche, eine Variable hinzuzufügen, kann ich es nicht zum Laufen bringen. So/guide-to funktioniert, aber/guide-to/london gibt den Fehler "anyplace ist nicht angegeben"

Ich mache alle Routing in application.ini. Hier ist meine Datei:

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 1 

resources.layout.layoutPath = APPLICATION_PATH "/views/layouts/" 
resources.layout.layout = wrapper 

resources.view = "" 

resources.router.routes.home.route = "/stuff" 
resources.router.routes.home.defaults.module = default 
resources.router.routes.home.defaults.controller = index 
resources.router.routes.home.defaults.action = index 

resources.router.routes.guide-to.route = "/guide-to" 
resources.router.routes.guide-to.defaults.controller = "destination" 
resources.router.routes.guide-to.defaults.action = "guide-to" 

resources.router.routes.place.route = "guide-to/:someplace" 
resources.router.routes.place.defaults.controller = "destination" 
resources.router.routes.place.defaults.action = "guide-to" 

resources.router.routes.guides.route = "/guiderrrs" 
resources.router.routes.guides.defaults.controller = destination 
resources.router.routes.guides.defaults.action = guiderrrs 

resources.router.routes.guidez.route = "/guidez" 
resources.router.routes.guidez.defaults.controller = destination 
resources.router.routes.guidez.defaults.action = guidez 

pagination.item.count.per.page = 10 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Kann jemand das Problem erkennen? Oder hat jemand eine funktionierende application.ini, die sie teilen könnten?

Alle Beiträge dankbar angenommen!

+0

eine Sache, die Sie bei Routen beachten sollten "Routen werden in umgekehrter Reihenfolge abgeglichen, also stellen Sie sicher, dass Ihre allgemeinsten Routen zuerst definiert werden". Ich glaube nicht, dass das dein Problem ist, aber ich bin mir nicht sicher, da ich mir nicht sicher bin, ob die oberste Route die erste oder letzte ist :) – RockyFord

Antwort

1

Sie müssen einen Standardwert für eine Variable angeben. Irgendwo ist Variable, also müssen Sie ihm einen Standardwert geben. Sonst wird es standardmäßig aufheben. Ich denke so:

resources.router.routes.place.defaults.someplace="deault_value" 

Meiner Meinung nach ist es nicht eine gute Idee, Ihre URL zu den genauen Namen zuzuordnen. weil URL wirklich mit der Anwendung verbunden wird, die sich ändern kann.

Ich bevorzuge lieber einen generischen Router in meinem Bootstrap. und dann mappe meine URL darauf. Mit diesem Ansatz ist mein Routing-System das gleiche wie ich ein neues Projekt starte. Verwenden Sie so etwas in Ihrem Bootstrap. es ist sogar kürzer als alle Routen definieren denn wenn Dinge, die Sie zurück ändern

protected function _initRoutes(){ 
    $front_controller=self::getFrontController(); 
    $router = $front_controller->getRouter(); 

    $standard_route=new Zend_Controller_Router_Route(
     ':lang/:module/:controller/:action/:param_one/:param_two/:param_three/*', 
     array( 'lang'=>$user_language, 
       'module'=>'default', 
       'controller'=>'index', 
       'action' => 'index', 
       'param_one'=>NULL, 
       'param_two'=>NULL, 
       'param_three'=>NULL 
     ) 
    ); 
    $router->addRoute('standard', $standard_route); 


    $default_route=new Zend_Controller_Router_Route(
     ':lang/:controller/:action/:param_one/:param_two/:param_three/*', 
     array('lang'=>$user_language, 
       'module'=>'default', 
       'controller'=>'index', 
       'action' => 'index', 
       'param_one'=>NULL, 
       'param_two'=>NULL, 
       'param_three'=>NULL 
     ) 
    );  
    $router->addRoute('default', $default_route); 


    $front_controller->setRouter($router); 


} 

Lang meine eigene Variable ist für die Internationalisierung suppor müssten geändert werden.

+0

Das funktioniert oder ich Evan - fantastische Arbeit! Ich musste nur ein bisschen ändern - fügte eine Voreinstellung hinzu - aber jetzt bin ich wieder auf dem richtigen Weg! resources.router.routes.defaults.place.someplace = "deault_value" – Andrew

1

Ihre Konfiguration ist korrekt. Ich glaube, Sie verwenden den Parameter falsch, um den Fehler zu beurteilen.

Sie sollten einen Controller in Ihrem Standardmodul namens DestinationController haben und dies mindestens haben, um Zugriff auf Ihre Variable zu bekommen.

class DestinationController extends Zend_Controller_Action 
{ 
    public function guideToAction() 
    { 
     var_dump($this->getRequest()->getParams()); 
     var_dump($this->getRequest()->getParam('someplace')); 
     exit; 
    } 
} 

Dies funktioniert für mich mit der Konfiguration, die Sie angegeben haben.

Ich hoffe, es hilft.