Php 如何访问Zend Framework 2中的route、post、get等参数

Php 如何访问Zend Framework 2中的route、post、get等参数,php,file-upload,zend-route,zend-framework2,Php,File Upload,Zend Route,Zend Framework2,如何在zf2中获取与页面请求相关的各种参数?与post/get参数一样,正在访问的路由、发送的头和上载的文件。最简单的方法是使用beta5中引入的。它具有实用的方法,可以方便地访问不同类型的参数。和往常一样,阅读对于理解应该如何使用某些东西是有价值的 获取单个值 要获取控制器中命名参数的值,需要为要查找的参数类型选择适当的方法,并传入名称 示例: 默认值 所有这些方法还支持默认值,如果找不到具有给定名称的参数,将返回默认值 例子: 访问时,, $orderBy的值为birthdate。 访问时

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

最简单的方法是使用beta5中引入的。它具有实用的方法,可以方便地访问不同类型的参数。和往常一样,阅读对于理解应该如何使用某些东西是有价值的

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

示例:

默认值 所有这些方法还支持默认值,如果找不到具有给定名称的参数,将返回默认值

例子: 访问时,, $orderBy的值为birthdate。 访问时,, $orderBy将具有默认值名称。

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

例子: 访问$allGetValues时,它将是一个类似

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

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

例子:
注意:您可以使用superglobals$\u GET、$\u POST等,但不鼓励这样做。

例如,获取发布的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数组。
希望这有帮助。

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

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;
//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');

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

$params=json\u decodefile\u get\u contents'php://input",对,; 打印$params


原因:参见

中的7,直接调用params插件也是可能的,这是fromRoute的快捷方式:$this->params'key',default'@Robin,这是真的。请注意,您不能使用它来获取所有路由参数,因为在没有参数的情况下调用它将返回Params插件,而不是route stuff。+1表示单元测试注释+链接。出于某种原因,很少有人考虑检查单元测试。如果需要原始的POST主体,请使用请求对象的getContent。从控制器中,您可以执行:$content=$this->getRequest->getContentOn ZF2我们如何以?name=mike的形式检索URL参数?
$this->params()->fromPost('paramname'); 
$content = file_get_contents('php://input');
print_r(json_decode($content));
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;
//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');