Zend Framework application.ini路由器问题

时间:2012-03-31 09:05:57

标签: zend-framework

好的,我对此很陌生,并仔细阅读所有教程并回答了我能找到的问题。不幸的是,我无法找到适合我的完整application.ini。

某处我必须填满 - 我可以让基本路由工作正常,但是一旦我尝试添加变量,我就无法使其工作。所以/ guide-to有效,但是/ guide-to / london给出错误“someplace not specified”

我在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?

感谢所有的贡献!

2 个答案:

答案 0 :(得分:1)

您需要为someplace变量指定默认值。 someplace是可变的,所以你需要给它一个默认值。否则它将默认为undefine。 我想是这样的:

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

在我看来,将您的网址映射到确切名称并不是一个好主意。 因为网址真的与可以改变的应用程序相结合。

我更喜欢在我的引导程序中使用通用路由器。然后将我的网址映射到它。使用这种方法我的路由系统与我开始一个新项目是一样的。 在你的bootstrap中使用这样的东西。它甚至比定义所有路线都短 因为如果事情发生变化,你需要改回来

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是我自己的国际化支持变量。

答案 1 :(得分:1)

您的配置正确无误。我相信您使用参数错误判断错误。

你的默认模块中应该有一个名为DestinationController的控制器,并且至少要有一个控制器来访问你的someplace变量。

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

这适用于我给你的配置。

希望它有所帮助。