0

我正在使用 SLIM 2.0.0

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

在下面的例子中

  • 如果我通过 POST 调用它:curl -d "param1=hello&param2=world" http://localhost/foo它会打印:helloworld CORRECT!!
  • 如果我通过 GET 调用它:http://localhost/foo/hello/world它会打印:NOTHING!! <- 错了!!

为什么?

<?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');
}
?>
4

1 回答 1

4

解决了!在文档页面Request Variables - Slim Framework Documentation我读到:

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(' 访问姓名')。

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

感谢布莱恩·内斯比特

于 2012-09-13T15:23:22.350 回答