好的,我对此很陌生,并仔细阅读所有教程并回答了我能找到的问题。不幸的是,我无法找到适合我的完整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?
感谢所有的贡献!
答案 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;
}
}
这适用于我给你的配置。
希望它有所帮助。