Slim Framework 2.0.0无法使用->;params()与GET


Slim Framework 2.0.0 Unable to use ->params() with GET

我使用的是SLIM 2.0.0

是否可以将->params()与GET一起使用?

在下面的示例中

  • 如果我通过POST:curl -d "param1=hello&param2=world" http://localhost/foo调用它,它会打印:你好,世界正确
  • 如果我用GET:http://localhost/foo/hello/world调用它,它会打印:什么都没有<-错了

为什么?

<?php
require 'Slim/Slim.php';
'Slim'Slim::registerAutoloader();
$app = new 'Slim'Slim();
$app -> get('/foo/:param1/:param2', 'foo');
$app -> post('/foo', 'foo');
$app -> run();
function foo() {
    $request = 'Slim'Slim::getInstance() -> request();
    echo $request -> params('param1');
    echo $request -> params('param2');
}
?>

已解决!在文档页面请求变量-Slim框架文档中,我读到了以下内容:

HTTP请求可能有相关的变量(不要与路由变量混淆)。与当前HTTP请求一起发送的GET、POST或PUT变量通过Slim应用程序的请求对象公开。

如果您想快速获取请求变量值而不考虑其类型,请使用请求对象的params()方法:

<?php
$req = $app->request();
$paramValue = $req->params('paramName');

params()方法将首先搜索PUT变量,然后搜索POST变量,再搜索GET变量。如果找不到变量,则返回null。如果你只想搜索特定类型的变量,你可以使用以下方法:

<?php
// Get request object
$req = $app->request();
//GET variable
$paramValue = $req->get('paramName');
//POST variable
$paramValue = $req->post('paramName');

因此:

关键行是"HTTP请求可能有相关的变量(不要与路由变量混淆)。"

http://domain.com/foo/hello/wold?name=brian

在上面的URI中,路由变量/参数是从"/foo/hello/world"部分读取的。请求GET变量是从查询字符串('name=brian')中读取的,可以由$app->request()->GET('name')或$app->request()->params('name])访问。

请求POST变量从请求的正文中解析,可以访问$app->request()->POST('param1')或$app->request()->params('param1')。

感谢Brian Nesbitt