Подтвердить что ты не робот

Тонкие параметры PHP и GET

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

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

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

Случай с понедельника? Я переусердствовал? Спасибо заранее!

4b9b3361

Ответ 1

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

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

$ app - это тонкий пример.

Или если вы хотите быть более конкретным

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

Ответ 2

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

Цитирование документации:

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

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

Ответ 3

Я исправил свой api, чтобы получить параметр json body OR url, подобный этому.

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

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

Ответ 4

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

Ответ 5

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

$_SERVER['QUERY_STRING']

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

Ответ 6

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

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

Надеюсь, это поможет вам!

Ответ 7

Используйте $id = $request->getAttribute('id'); //where id is the name of the param

Ответ 8

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