如何访问途径,发布,获取Zend框架2等参数(How to access route, post,

2019-06-17 19:41发布

我怎样才能获得与在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');


文章来源: How to access route, post, get etc. parameters in Zend Framework 2