使用此代码:
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute(
'test',
new Zend_Controller_Router_Route(
'/test/:action/:type/:id',
array(
'controller' => 'admin'
)
)
);
http://app/test/param1/param2/param3 - >行
http://app/test/param1/param2/ - > FAIL
在第二种情况下,应用程序无法识别param2。
似乎应用程序需要param3才能读取param2 ...
我该怎么做?
谢谢!
使用@RageZ
中的代码进行测试$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute(
'test',
new Zend_Controller_Router_Route(
'/test/:action/:type/:id',
array(
'controller' => 'admin',
'id' => 0
),
array(
'id' => '\d+'
)
)
);
http://app/test/ - >行
http://app/test/some - >行
http://app/test/some/more - > FAIL
http://app/test/some/more/andmore - >行
想法?
答案 0 :(得分:1)
如果参数是可选的,则必须提供默认值。
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute(
'test',
new Zend_Controller_Router_Route(
'/test/:action/:type/:id',
array(
'controller' => 'admin',
'id' => 0
),
array(
'id' => '\d+'
)
)
);
与您的问题无关,但使用addRoute的第三个参数是一个好习惯。 Zend Framework将验证参数值是否与您指定的格式匹配,在这种情况下,我认为id是一个整数。
答案 1 :(得分:1)
尝试为所有内容提供默认值
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute(
'test',
new Zend_Controller_Router_Route(
'/test/:action/:type/:id',
array(
'controller' => 'admin',
'action' => 'index',
'type' => 'sometype',
'id' => 0
),
array(
'id' => '\d+'
)
)
);
刚刚在一些测试项目中试过你的代码并修复它希望它适合你!