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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Zend Framework 2中访问路由,发布,获取等参数相关的知识,希望对你有一定的参考价值。

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

答案

最简单的方法是使用beta5中引入的Params plugin。它具有实用方法,可以轻松访问不同类型的参数。和往常一样,阅读the tests对于理解应该如何使用某些内容非常有价值。

获得单一价值

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

Examples:

$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

默认值

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

Example:

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

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

获取所有参数

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

Example:

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

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

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

不使用Params插件

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

Example:

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

注意:您可以使用超级全局$ _GET,$ _POST等,但不鼓励这样做。

另一答案

例如,获取已发布的json字符串的最简单方法是读取'php:// input'的内容然后解码它。例如,我有一个简单的Zend路线:

'save-json' => array(
'type' => 'ZendMvcRouterHttpSegment',
            'options' => array(
                'route'    => '/save-json/',
                'defaults' => array(
                    'controller' => 'CDBControllerIndex',
                    '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数组。希望这可以帮助。

另一答案
require_once 'lib/Zend/Loader/StandardAutoloader.php';
$loader = new ZendLoaderStandardAutoloader(array('autoregister_zf' => true));

$loader->registerNamespace('HttpPhpEnvironment', 'lib/Zend/Http'); 

// Register with spl_autoload:
$loader->register();

$a = new ZendHttpPhpEnvironmentRequest();
print_r($a->getQuery()->get()); exit;
另一答案

如果您的内容类型是“application / -www-form-urlencoded”,则上述所有方法都可以正常工作。但是,如果您的内容类型是“application / json”,那么您将不得不执行以下操作:

$ params = json_decode(file_get_contents('php:// input'),true);的print_r($ params)方法;

理由:在https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make看到#7

另一答案

如果您无法访问插件,例如在控制器之外,您可以从servicelocator获取这样的参数

//from POST
$foo = $this->serviceLocator->get('request')->getPost('foo'); 
//from GET
$foo = $this->serviceLocator->get('request')->getQuery()->foo;
//from route
$foo = $this->serviceLocator->get('application')->getMvcEvent()->getRouteMatch()->getParam('foo');

以上是关于如何在Zend Framework 2中访问路由,发布,获取等参数的主要内容,如果未能解决你的问题,请参考以下文章

通用页面的 Zend Framework 路由?

如何使 Zend Framework 2 与 nginx 一起工作?

如何在 Zend Framework 2 中为局部使用共享视图脚本路径?

Zend Framework 2 中的路由,跳过 url 中的“索引”操作但获取 id

Zend Framework:从路由获取子域参数

zend framework如何安装?