当我在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
?
答案 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()
检查以避免警告;可能会将这一部分塞进自己的方法或帮助者。但是它可以完成这项工作,对吗?