无法从PHP SLIM框架访问ember-data REST请求标头

时间:2014-09-02 10:58:29

标签: php rest ember-data slim

这是与Ember js指南中的RESTAdapter代码:

App.ApplicationAdapter = DS.RESTAdapter.extend({
   namespace: 'emberboot/api',

   headers: {
      'API_KEY': 'secret key'
  }
});

这是从SLIM PHP获取标头的代码。 get header函数在此处记录http://docs.slimframework.com/#Request-Headers

// - http://localhost/emberboot/api/posts
// - $app->get('/posts', 'getPosts'); //get all post

function getPosts() 
{
    $request = \Slim\Slim::getInstance()->request();
    $key = $request->headers->get('API_KEY');

    //logging
    $file = 'headers.txt';
    file_put_contents($file, $key);
    ;
    ;

这是来自Chrome开发者工具:

enter image description here

显然,Ember数据部分没有任何问题,因为标题就在那里。但记录文件:headers.txt 根本不包含任何文字 - 为空!

UDATED - @engvrdr解决的答案。使用破折号而不是下划线

这是RESTAdapter代码UPDATED!

App.ApplicationAdapter = DS.RESTAdapter.extend({
   namespace: 'emberboot/api',

   headers: {
      'API-KEY': 'secret key'
  }
});

更新了Slim PHP代码:

function getPosts() 
{
    $request = \Slim\Slim::getInstance()->request();
    $headers = $request->headers;
    $apiKey = $headers->get('API-KEY');
    $file = 'headers.txt';
    file_put_contents($file, $apiKey);
    ;
    ;

1 个答案:

答案 0 :(得分:2)

我不是一个苗条的专家,但你可以试试吗? (在文档请求中看起来像属性而不是方法)

function getPosts() 
{
$app = \Slim\Slim::getInstance();
$key = $app->request->headers->get('API-KEY');

//logging
$file = 'headers.txt';
file_put_contents($file, $key);

编辑: 我发现这是一个关于HTTP标题名称中的下划线(_)的问题(Why underscores are forbidden in HTTP header names

如果您将其更改为API-KEY,它将起作用。