我正在使用Zend 1.10。我正在尝试为无限变量(如 abc.com/var1/var2/var3 等)创建一条路由。
到目前为止,我已经搜索并发现我可以为每个变量添加路由,例如
$route = new Zend_Controller_Router_Route(
'/emaillog/:var1',
array(
'controller' => 'emaillog', // The controller to point to.
'action' => 'index', // The action to point to, in said Controller.
':var1' =>null //default value if param is not passed
)
);
$frontController->getRouter()->addRoute('emaillogWithVar1', $route);
对于第二个变量,
$route = new Zend_Controller_Router_Route(
'/emaillog/:var1/:var2',
array(
'controller' => 'emaillog', // The controller to point to.
'action' => 'index', // The action to point to, in said Controller.
':var1' =>null, //default value if param is not passed
':var2' =>null //default value if param is not passed
)
);
$frontController->getRouter()->addRoute('emaillogWithVar2', $route);
但是我要做的工作可以包含 1-∞ 个无限变量。
所以我想有一个无限变量的路由。
任何帮助将不胜感激!
有一种方法可以获取无限参数。为此,您不必声明它们。
为了避免说网址index/test/p1/p2/p3/p4/p5
,现在如果你在IndexController
内尝试以下操作:
public function testAction()
{
var_dump($this->getRequest());
}
您将获得Zend_Controller_Request_Http
实例的转储,在该转储中,您将看到2个属性,_params
和_pathInfo
,例如:
protected '_pathInfo' => string '/index/test/p1/p2/p3/p4/p5' (length=26)
protected '_params' =>
array (size=5)
'controller' => string 'index' (length=5)
'action' => string 'test' (length=4)
'p1' => string 'p2' (length=2)
'p3' => string 'p4' (length=2)
'module' => string 'default' (length=7)
第一种方法:现在在_params
中,它们将作为key => value
对出现,只要它们even
,最后一个odd
参数将被忽略。您可以通过以下方式获取这些(例如):
$params = $this->getRequest()->getParams();
unset($params['controller']);
unset($params['action']);
unset($params['module']);
$params = array_merge(array_keys($params), array_values($params));
var_dump($params);
输出:
array (size=4)
0 => string 'p1' (length=2)
1 => string 'p3' (length=2)
2 => string 'p2' (length=2)
3 => string 'p4' (length=2)
第二种方法:或者您可以使用_pathinfo
来使用爆炸来获取参数,例如:
$path = $this->getRequest()->getPathinfo();
$params = explode('/', $path);
unset($params[0]);
unset($params[1]);
unset($params[2]);
var_dump($params);
输出:
array (size=5)
3 => string 'p1' (length=2)
4 => string 'p2' (length=2)
5 => string 'p3' (length=2)
6 => string 'p4' (length=2)
7 => string 'p5' (length=2)