Slim PHP and GET Parameters

孤街浪徒 提交于 2019-12-02 14:50:11
Martijn

You can do this very easily within the Slim framework, you can use:

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

$app here is a Slim instance.

Or if you want to be more specific

//GET parameter

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

//POST parameter

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

You would use it like so in a specific route

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

You can read the documentation on the request object http://docs.slimframework.com/request/variables/

As of 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;
});

For Slim 3 you need to use the method getQueryParams() on the PSR 7 Request object.

Citing the documentation:

You can get the query parameters as an associative array on the Request object using getQueryParams().

You can also get a single query parameter value, with optional default value if the parameter is missing, using getQueryParam($key, $default = null).

I fixed my api to receive a json body OR url parameter like this.

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

This might not suit everyone but it worked for me.

In Slim 3.0 the following also works:

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'));
        // ...
    }
}

Not sure much about Slim PHP, but if you want to access the parameters from a URL then you should use the:

$_SERVER['QUERY_STRING']

You'll find a bunch of blog posts on Google to solve this. You can also use the PHP function parse_url.

IF YOU WANT TO GET PARAMS WITH PARAM NAME

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

The params() method will first search PUT variables, then POST variables, then GET variables. If no variables are found, null is returned. If you only want to search for a specific type of variable, you can use these methods instead:

//--- GET variable

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

//--- POST variable

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

//--- PUT variable

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

IF YOU WANT TO GET ALL PARAMETERS FROM REQUEST WITHOUT SPECIFYING PARAM NAME, YOU CAN GET ALL OF THEM INTO ARRAY IN FORMAT KEY => VALUE

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

$data will be an array that contains all fields from request as below

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

Hope it helps you!

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

Probably obvious to most, but just in case, building on vip's answer concerning Slim 3, you can use something like the following to get the values for the parameters.

        $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);
                }
            }
        }

Slim 3

$request->getQueryParam('page')

or

$app->request->getQueryParam('page')
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!