具有无限参数的Zend路线

时间:2017-10-31 10:37:00

标签: php zend-framework zend-route

我正在使用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-∞无限变量。

所以我想拥有一次无限变量的路线。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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 param将被忽略。你可以通过(例如)获得这些:

$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)