我怎样才能获得与在ZF2页面请求的各种参数? 比如POST /获取参数,路线被访问,头部信息和上传文件。
Answer 1:
要做到这一点,最简单的方法是使用PARAMS插件 ,在beta5的介绍。 它有实用的方法可以很容易地访问不同类型的参数。 与往常一样,阅读测试可以证明有价值的明白了什么是应该如何使用。
获取单个值
要获得控制器命名参数的值,则需要选择参数的类型选择适当的方法,你正在寻找,并通过在名称中。
例子:
$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 ,$排序依据的值将为生日 。
当访问http://example.com/ ,$排序依据将有默认值的名称 。
获取所有参数
为了得到一个类型的所有参数,只是不经过任何和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');
注意:您也可以使用超全局变量$ _GET,$ _ POST等,但不鼓励。
Answer 2:
获得贴出的JSON字符串,例如easisest方式,是阅读的PHP://输入“的内容,然后对其进行解码。 比如我有一个简单的Zend路线:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
而我想采用了棱角分明的$ http.post发布的数据吧。 该职位是好的,但在Zend公司的retrive方法
$this->params()->fromPost('paramname');
没有得到在这种情况下,任何东西。 所以我的解决办法是,尝试各种类似$ _ POST和上述的其他方法,方法从读取后的PHP://“:
$content = file_get_contents('php://input');
print_r(json_decode($content));
我到底我的JSON数组。 希望这可以帮助。
Answer 3:
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;
Answer 4:
如果你的内容类型是“应用程序/ -www窗体-urlencoded”所有上述方法将正常工作。 但如果你的内容类型是“应用/ JSON”,那么你必须做到以下几点:
$ PARAMS = json_decode(的file_get_contents( 'PHP://输入'),TRUE); 的print_r($ params)方法;
原因:参见#7 https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Answer 5:
如果你没有访问插件例如控制器以外您可以从这样的服务定位得到PARAMS
//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');