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

如何获得zf2中与页面请求相关的各种参数? 就像post / get参数一样,访问的路由,发送的头文件和上传的文件。

最简单的方法是使用beta5中引入的Params插件 。 它具有实用的方法,使访问不同types的参数很容易。 像往常一样,阅读testing可以certificate理解如何使用某些东西是有价值的。

获得一个单一的价值

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

例子:

$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 

默认值

所有这些方法还支持默认值,如果没有find给定名称的参数,将返回默认值。

例:

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

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

获取所有参数

要获得一个types的所有参数,只要不传入任何东西,Params插件将返回一个值为数组的名称作为键。

例:

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

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

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

不使用Params插件

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

例:

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

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

例如,获取发布的jsonstring最简单的方法是读取“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发布数据。 这个post很好,但在Zend的方法

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

在这种情况下没有得到任何东西。 所以我的解决scheme是,尝试像$ _POST和上述其他方法的各种方法后,从'php://'读取:

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

我最终得到了我的json数组。 希望这可以帮助。

 require_once 'lib/Zend/Loader/StandardAutoloader.php'; $loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true)); $loader->registerNamespace('Http\PhpEnvironment', 'lib/Zend/Http'); // Register with spl_autoload: $loader->register(); $a = new Zend\Http\PhpEnvironment\Request(); print_r($a->getQuery()->get()); exit;