修剪PHP和GET参数

问题描述 投票:55回答:8

我正在使用Slim PHP作为RESTful API的框架,到目前为止它非常棒。超级易于使用,但我确实有一个问题,我找不到答案。如何从Slim PHP中的URL中获取GET参数?

例如,如果我想使用以下内容:

http://api.example.com/dataset/schools?zip=99999&radius=5

一个星期一的案例?我是否在思考它?提前致谢!

php rest slim
8个回答
105
投票

您可以在Slim框架内轻松完成此任务,您可以使用:

$paramValue = $app->request()->params('paramName');

这里的$ app是一个Slim实例。

或者,如果你想更具体

// GET参数

$paramValue = $app->request()->get('paramName');

// POST参数

$paramValue = $app->request()->post('paramName');

您可以在特定路线中使用它

$app->get('/route',  function () use ($app) {
          $paramValue = $app->request()->params('paramName');
});

您可以阅读请求对象http://docs.slimframework.com/request/variables/上的文档

Slim v3

$app->get('/route', function ($request, $response, $args) {
    $paramValue = $request->params(''); // equal to $_REQUEST
    $paramValue = $request->post(''); // equal to $_POST
    $paramValue = $request->get(''); // equal to $_GET

    // ...

    return $response;
});

22
投票

对于Slim 3,您需要在PSR 7 getQueryParams()对象上使用Request方法。

引用the documentation

您可以使用getQueryParams()在Request对象上将查询参数作为关联数组。

您还可以使用getQueryParam($ key,$ default = null)获取单个查询参数值,如果参数缺失,则使用可选的默认值。


3
投票

我修复了我的api以接收像这样的json body OR url参数。

$data = json_decode($request->getBody()) ?: $request->params();

这可能不适合所有人,但它对我有用。


2
投票

在Slim 3.0中,以下内容也适用:

routes.php文件

require_once 'user.php';

$app->get('/user/create', '\UserController:create');

user.php的

class UserController
{
    public function create($request, $response, array $args)
    {
        $username = $request->getParam('username'));
        $password = $request->getParam('password'));
        // ...
    }
}

1
投票

对Slim PHP不太了解,但是如果你想从URL访问参数那么你应该使用:

$_SERVER['QUERY_STRING']

你会在谷歌上找到一堆博客文章来解决这个问题。您还可以使用PHP函数parse_url


1
投票

如果你想用PARAM NAME获得参数

$value = $app->request->params('key');

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

// --- GET变量

$paramValue = $app->request->get('paramName');

// --- POST变量

$paramValue = $app->request->post('paramName');

// --- PUT变量

$paramValue = $app->request->put('paramName');

如果您想要在没有指定参数名称的情况下获取所有参数,您可以将所有这些参数放入格式键=>值

$data = json_decode( $app->request->getBody() ) ?: $app->request->params();

$ data将是一个包含请求中所有字段的数组,如下所示

$data = array(
    'key' => 'value',
    'key' => 'value',
    //...
);

希望它能帮到你!


1
投票

使用$id = $request->getAttribute('id'); //where id is the name of the param


0
投票

对大多数人来说可能是显而易见的,但为了以防万一,在vip关于Slim 3的答案的基础上,您可以使用类似下面的内容来获取参数的值。

        $logger = $this->getService('logger');
        $params = $request->getQueryParams();
        if ($params)  {
            foreach ($params as $key => $param)     {
                if (is_array($param))   {
                    foreach ($param as $value)  {
                        $logger->info("param[" . $key . "] = " . $value);
                    }
                }
                else    {
                    $logger->info("param[" . $key . "] = " . $param);
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.