Slim Framework - получить все заголовки

Вчера я открыл для себя Slim, и он мне очень понравился. Я столкнулся с некоторыми незначительными проблемами. Вот один:

Я хотел бы отправить дополнительные заголовки из моего приложения пользовательского интерфейса jQuery в мой Slim REST API. Не проблема для jQuery — $.ajax предоставляет такую ​​возможность. Однако я решил написать небольшое приложение для Slim, чтобы проверить способность Slim предоставить мне доступ ко всем заголовкам запросов. Вот это приложение

function indexFunction()
{
 global $app;
 $headers = $app->request->headers;
echo json_encode($headers);
}

header('Content-type:text/plain');
$app = new \Slim\Slim();
$app->get("/",'indexFunction');
$app->run();

Я открыл DHC в Chrome и запустил от запроса GET

http://ipaddr/slimrestapi

после добавления заголовка xhash = abc123

На всякий случай я запустил Fiddler и наблюдал за трафиком, когда отправлял этот запрос. Fiddler достоверно сообщил следующие заголовки

Host: ipaddr
Connection: keep-alive
xhash: abc123
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,de;q=0.6,fr;q=0.4

Однако результаты, возвращаемые slim, представляют собой пустой объект JSON {}.

Я что-то не понимаю или это ошибка в Slim? Буду очень признателен за любую помощь.


person DroidOS    schedule 16.12.2014    source источник
comment
У кого-нибудь есть новый ответ для последней версии?   -  person ADJenks    schedule 09.04.2021


Ответы (1)


Заголовки в Slim являются экземпляром Slim\Helper\Set. Вы можете получить желаемое содержимое с помощью функции all().

json_encode($app->request()->headers()->all());

Или в полном примере

$app->get('/', function() use ($app) {
    echo json_encode($app->request()->headers()->all());
    echo $app->request()->headers()->get('xhash');
});

В примере также показано, как можно избежать использования этого оператора global. Это хорошее чтение на эту тему http://tomnomnom.com/posts/why-global-state-is-the-devil-and-how-to-avoid-using-it

person Tuim    schedule 16.12.2014
comment
Спасибо. У меня просто проблемы с новичком, или документация Slim еще не совсем готова? Я потратил некоторое время на просмотр документов, прежде чем публиковать здесь, и я не нашел все(). Помимо этого, использование подходит, когда вы хотите (тьфу...) использовать анонимные функции, но вскоре это станет громоздким при создании чего-либо, кроме самых тривиальных REST API. Лучший способ избежать глобальных изменений — использовать $app = \Slim\Slim::getInstance(); в первой строке каждого метода. Помимо этого - просто личное мнение - я думаю, что использование нескольких разумно определенных глобальных переменных не НАСТОЛЬКО ужасно. - person DroidOS; 16.12.2014