Slim 3 - как получить все переменные get/put/post?

Как я могу получить все get/ put/ post переменные, как в Slim 2 для Slim 3?

Тонкий 2,

$allGetVars = $app->request->get();
$allPutVars = $app->request->put();
$allPostVars = $app->request->post();

Как я могу сделать это в Slim 3?

И, например, http://example.com/books/1?title=hello&content=world

Как теперь получить параметры title и content в Slim 3?

Тонкий 2,

$title = $app->request->get('title');
$content = $app->request->get('content');

Как я могу сделать это в Slim 3?


person laukok    schedule 19.09.2015    source источник


Ответы (4)


Получите все get/put/post параметры:

//GET
$allGetVars = $request->getQueryParams();
foreach($allGetVars as $key => $param){
   //GET parameters list
}

//POST or PUT
$allPostPutVars = $request->getParsedBody();
foreach($allPostPutVars as $key => $param){
   //POST or PUT parameters list
}

Значение одного параметра:

//Single GET parameter
$getParam = $allGetVars['title'];

//Single POST/PUT parameter
$postParam = $allPostPutVars['postParam'];
person Davide Pastore    schedule 19.09.2015
comment
Спасибо за ответ! - person laukok; 19.09.2015
comment
Спасибо друг! С трудом ищу это - person wobsoriano; 20.03.2016
comment
Привет. Это не работает для меня. Единственное, что работает, это $request->getHeaders();, и он добавляет HTTP_ в качестве префикса. Например, если я использую length в качестве параметров сообщения, с getHeaders() я получу HTTP_LENGTH. Я не понимаю, почему. И getParsedBody() возвращает в основном NULL. Спасибо! PS: Самое странное: если я делаю $request->hasHeader('length'), я получаю значение своего параметра. - person TDK; 04.05.2016
comment
@TDK Как вы отправляете запрос и какую версию Slim используете? - person Davide Pastore; 04.05.2016
comment
@Davide Я использую Slim 3 и отправляю запрос POST через Расширенный клиент REST для тестирования. - person TDK; 04.05.2016
comment
@TDK, вы уверены, что для заголовка Content-type установлено значение application/x-www-form-urlencoded? - person Davide Pastore; 04.05.2016
comment
@Давид Да. Я попытался с другим типом контента, чтобы попробовать. но все равно ничего. Результат array(0) {} и заголовки запроса: Start_lng: 2.6423183977058 Start_lat: 56.865296679535 Size: 0 Content-Type: application/x-www-form-urlencoded - person TDK; 04.05.2016
comment
@TDK Может быть, вы могли бы попытаться создать для этого новый вопрос. Также добавьте точную версию Slim, свой сервер и файл .htaccess. - person Davide Pastore; 04.05.2016
comment
@Давид Хорошо, спасибо. Я сделал это здесь, если хотите: stackoverflow.com/questions/37031274/. - person TDK; 04.05.2016
comment
Добавим, что подпись маршрута в этом случае $app->get('/books/1', function ($request, $response, $args) { ...} - person Biguá; 20.10.2016
comment
Почему это так сложно? Я мог бы также просто использовать старый добрый $_GET - person Gherman; 06.10.2017

Чтобы получить все параметры запроса:

$request->getParams() 
person nogo0d    schedule 07.05.2016

URI запроса: getQueryParams()

Тело запроса: getBody()/getParsedBody()

Это не совсем то, что вы ищете, но это довольно близко.

person Martin    schedule 19.09.2015
comment
Спасибо за ответ! - person laukok; 19.09.2015

Вы можете использовать метод map() для объединения get, post и put в один маршрут.

$app->map(['GET', 'POST', 'PUT'], function(Request $request, Response $response, array $args)) { }

Первый аргумент — это массив методов HTTP, которые вы хотите сопоставить. Второй параметр — это функция, которая обрабатывает запрос; передать запрос, ответ и массив аргументов.

person Mister Moody    schedule 25.02.2019
comment
это не отвечает на вопрос. - person scones; 02.03.2020