Тонкие параметры PHP и GET - PullRequest
55 голосов
/ 14 ноября 2011

Я играю с Slim PHP в качестве фреймворка для RESTful API, и пока это здорово. С ним очень легко работать, но у меня есть один вопрос, на который я не могу найти ответ. Как получить параметры GET из URL в Slim PHP?

Например, если я хочу использовать следующее:

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

Случай понедельника? Я обдумываю это? Заранее спасибо!

Ответы [ 8 ]

105 голосов
/ 31 декабря 2011

Вы можете сделать это очень легко в рамках Slim, вы можете использовать:

$paramValue = $app->request()->params('paramName');
Приложение

$ - это 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 голосов
/ 08 октября 2016

Для Slim 3 необходимо использовать метод getQueryParams() для объекта PSR 7 Request.

Ссылаясь на документацию :

Вы можете получить параметры запроса в виде ассоциативного массива для объекта Request, используя getQueryParams ().

Вы также можете получить одно значение параметра запроса, с необязательным значением по умолчанию, если параметр отсутствует,используя getQueryParam ($ key, $ default = null).

3 голосов
/ 09 апреля 2013

Я исправил свой API для получения параметра json body ИЛИ url, подобного этому.

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

Это может не подходить всем, но у меня это сработало.

2 голосов
/ 19 июня 2017

В Slim 3.0 также работает:

rout.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 голос
/ 12 апреля 2017

Использование $id = $request->getAttribute('id'); //where id is the name of the param

1 голос
/ 26 января 2016

ЕСЛИ ВЫ ХОТИТЕ ПОЛУЧИТЬ ПАРАМЫ С ИМЯ ПАРАМ

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

Метод params () сначала ищет переменные PUT, затем переменные POST, а затем переменные GET. Если переменные не найдены, возвращается ноль. Если вы хотите искать только определенный тип переменной, вы можете использовать вместо этого следующие методы:

// --- переменная 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 голос
/ 14 ноября 2011

Не совсем уверен насчет Slim PHP, но если вы хотите получить доступ к параметрам из URL, вам следует использовать:

$_SERVER['QUERY_STRING']

В Google вы найдете кучу постов в блоге, чтобы решить эту проблему.,Вы также можете использовать функцию PHP parse_url .

0 голосов
/ 04 мая 2019

Вероятно, очевидно для большинства, но на всякий случай, основываясь на ответе 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);
                }
            }
        }
...