在Zend中操作后获取所有参数?

时间:2011-10-26 08:46:38

标签: zend-framework

当我在Zend中调用下面的路由器时:

coupon/index/search/cat/1/page/1/x/111/y/222

当我得到$this->_params时,在控制器内部,我得到一个数组:

array(
    'module' => 'coupon',
    'controller' => 'index',
    'action' => 'search',
    'cat' => '1',
    'page' => '1',
    'x' => '111',
    'y' => '222'
)

但我只想得到:

array(
    'cat' => '1',
    'page' => '1',
    'x' => '111',
    'y' => '222'
)

请您告诉我一种方法来获取params之后的所有action

3 个答案:

答案 0 :(得分:10)

恕我直言,这更优雅,包括动作,控制器和方法键的变化。

$request = $this->getRequest();
$diffArray = array(
    $request->getActionKey(),
    $request->getControllerKey(),
    $request->getModuleKey()
);
$params = array_diff_key(
    $request->getUserParams(),
    array_flip($diffArray)
);

答案 1 :(得分:6)

据我所知,您将始终在params列表中获取控制器,操作和模块,因为它是默认值的一部分。你可以做这样的事情从你得到的数组中删除三个:

    $url_params = $this->getRequest()->getUserParams();
    if(isset($url_params['controller']))
        unset($url_params['controller']);
    if(isset($url_params['action']))
        unset($url_params['action']);
    if (isset($url_params['module']))
        unset($url_params['module']);

或者,因为您不希望每次需要列表时都这样做,所以创建一个帮助程序来为您执行此操作,如下所示:

class Helper_Myparams extends Zend_Controller_Action_Helper_Abstract
{
    public $params;

    public function __construct()
    {
        $request = Zend_Controller_Front::getInstance()->getRequest();
        $this->params = $request->getParams();
    }

    public function myparams()
    {       
        if(isset($this->params['controller']))
            unset($this->params['controller']);
        if(isset($this->params['action']))
            unset($this->params['action']);
        if (isset($this->params['module']))
            unset($this->params['module']);
        return $this->params;
    }

    public function direct()
    {
        return $this->myparams();
    }
}

你只需从控制器中调用它即可获得列表:

$this->_helper->myparams();

所以例如使用url:

http://127.0.0.1/testing/urls/cat/1/page/1/x/111/y/222

代码:

echo "<pre>";
print_r($this->_helper->myparams());
echo "</pre>";

我打印了以下数组:

Array
(
    [cat] => 1
    [page] => 1
    [x] => 111
    [y] => 222
)

答案 2 :(得分:3)

这个怎么样?

在控制器中:

$params = $this->getRequest()->getParams();
unset($params['module'];
unset($params['controller'];
unset($params['action'];

相当笨重;可能需要一些isset()检查以避免警告;可能会将这一部分塞进自己的方法或帮助者。但是它可以完成这项工作,对吗?