2012-03-31 81 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; 
    } 
} 

这适用于我用你给出的配置。

希望它有帮助。