如何在Zend Framework 2中访问路由,发布,获取等参数

如何在 zf2 中获取与页面请求相关的各种参数?例如post/get参数,正在访问的路由,发送的标头和上传的文件。


答案 1

最简单的方法是使用beta5中引入的Params插件。它具有实用程序方法,可以轻松访问不同类型的参数。与往常一样,阅读测试对于理解应该如何使用某些东西很有价值。

获取单个值

若要获取控制器中命名参数的值,需要为要查找的参数类型选择适当的方法并传入名称。

例子:

$this->params()->fromPost('paramname');   // From POST
$this->params()->fromQuery('paramname');  // From GET
$this->params()->fromRoute('paramname');  // From RouteMatch
$this->params()->fromHeader('paramname'); // From header
$this->params()->fromFiles('paramname');  // From file being uploaded

 

默认值

所有这些方法还支持在找不到具有给定名称的参数时返回的默认值。

例:

$orderBy = $this->params()->fromQuery('orderby', 'name');

访问 http://example.com/?orderby=birthdate 时,$orderBy将具有值出生日期
访问 http://example.com/ 时,$orderBy将具有默认值名称
 

获取所有参数

要获取一种类型的所有参数,只需不要传入任何内容,Params插件将返回一个值数组,其名称作为键。

例:

$allGetValues = $this->params()->fromQuery(); // empty method call

当访问 http://example.com/?orderby=birthdate&filter=hasphone$allGetValues将是一个数组,如

array(
    'orderby' => 'birthdate',
    'filter'  => 'hasphone',
);

 

不使用参数插件

如果您检查Params插件的源代码,您会发现它只是围绕其他控制器的薄包装器,以实现更一致的参数检索。如果您出于某种原因想要/需要直接访问它们,则可以在源代码中看到它是如何完成的。

例:

$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');

注意:你可以使用超全球_GET美元,_POST美元等,但这是不鼓励的。


答案 2

例如,获取已发布的 json 字符串的最简单方法是读取“php://input”的内容,然后对其进行解码。例如,我有一个简单的Zend路由:

'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route'    => '/save-json/',
                'defaults' => array(
                    'controller' => 'CDB\Controller\Index',
                    'action'     => 'save-json',
                ),
            ),
        ),

我想使用Angular的$ http.post 向它发布数据。帖子很好,但Zend的回溯方法

$this->params()->fromPost('paramname'); 

在这种情况下没有得到任何东西。所以我的解决方案是,在尝试了各种方法(如$_POST和上述其他方法)之后,从“php://”中读取:

$content = file_get_contents('php://input');
print_r(json_decode($content));

我最后得到了我的json数组。希望这有帮助。


推荐