2012-03-31 88 views
2

好的,我對此很新,翻遍所有的教程並回答了我可以找到的問題。不幸的是,我一直無法找到一個完全適合我的application.ini。Zend Framework application.ini路由器問題

某處我必須塞滿 - 我可以使基本路由工作正常,但只要我嘗試添加一個變量,我就無法使其工作。所以/ guide-to工作,但/ guide-to/london給出錯誤「某處未指定」

我正在做所有的application.ini路由。這是我的文件:

[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 

任何人都可以發現問題嗎?還是有人有一個可以共享的工作application.ini?

所有貢獻感激地收到!

+0

有一點需要注意路線「路線匹配的順序相反,因此請確保您的最通用路線是首先定義的」。我不認爲這是你的問題,但我不知道,因爲我不知道,如果最高路線是第一或最後:) – RockyFord 2012-04-01 11:07:20

回答

1

您需要指定someplace變量的默認值。有些地方是可變的,所以你需要給它一個默認值。否則它將默認爲undefine。 我覺得是這樣的:

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

在我看來這不是你的URL映射到的確切名稱是個好主意。 ,因爲url變得真的與可以改變的應用程序耦合在一起。

我寧願在我的引導程序中使用通用路由器。然後將我的網址映射到它。使用這種方法我的路由系統與我開始一個新項目相同。 在你的引導中使用像這樣的東西。它是不是定義的所有路由 因爲如果情況發生變化,你就需要改回來

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); 


} 

朗是我自己的國際化支承實變量更短。

+0

那個工作或我埃文 - 太棒了!我不得不改變一點 - 添加了默認設置 - 但現在我回到了正軌! resources.router.routes.defaults.place.someplace = 「deault_value」 – Andrew 2012-04-03 06:25:53

1

你的配置是正確的。我相信你使用錯誤的參數來判斷錯誤。

你應該在你的默認模塊中有一個名爲DestinationController的控制器,並把它作爲訪問你的someplace變量的最低限度。

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

這適用於我用你給出的配置。

希望它有幫助。