Slim Framework - вземете всички заглавки

Вчера открих Slim и много ми харесва. Сблъсках се с някои дребни проблеми. Ето един:

Бих искал да изпратя допълнителни заглавки от моето jQuery UI приложение към моя 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 все още не е готова? Прекарах известно време в разглеждане на документите, преди да публикувам тук, и не намерих all(). Освен това, използването е добре, когато искате (уф...) да използвате анонимни функции, но това скоро ще започне да става тромаво, когато създавате нещо друго, но не и най-простите REST API. По-добър начин за избягване на глобалното е да залепите $app = \Slim\Slim::getInstance(); в първия ред на всеки метод. Освен това - само лично виждане - мисля, че използването на няколко разумно дефинирани глобали не е ТОЛКОВА ужасно. - person DroidOS; 16.12.2014