Тонкие параметры PHP и GET
Я играю с Slim PHP в качестве рамки для RESTful API, и до сих пор это здорово. Супер легко работать, но у меня есть один вопрос, на который я не могу найти ответ. Как мне получить параметры GET из URL-адреса в Slim PHP?
Например, если я хотел использовать следующее:
http://api.example.com/dataset/schools?zip=99999&radius=5
Случай с понедельника? Я переусердствовал? Спасибо заранее!
Ответы
Ответ 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);
}
}
}