2014-11-12 15 views
0

Slim Framework를 API로 사용하고 있습니다. 임씨가 그것에 대한 GET 요청을합니다. 그러나 나는 헤더를 얻을 수 없다.REST 서버에서 요청 헤더를 가져올 수 없습니다.

(!) Fatal error: Cannot access protected property Slim::$request in C:\wamp\www\server\device_api\index.php on line 23 
Call Stack 
# Time Memory Function Location 
1 0.0010 248528 {main}() ..\index.php:0 
2 0.0240 860056 Slim->run() ..\index.php:9 
3 0.0240 878816 Slim_Route->dispatch() ..\Slim.php:1052 
4 0.0240 878864 call_user_func:{C:\wamp\www\server\device_api\Slim\Route.php:387} () ..\Route.php:387 
5 0.0240 878944 {closure:C:\wamp\www\server\device_api\index.php:19-25}() ..\Route.php:387 

나는 아무 소용이 있지만, 절대적으로 모든 것을 시도했다 : 나는 응답을

require 'Slim/Slim.php'; 
    $app = new Slim(); 
    $app->get('/project/:id', add_authorize(), 'getProject'); 
    $app->run(); 
    function getProject($project_title) { 
     //connect to database and return project details 
    } 

    function add_authorize() { 
     return function(){ 
     $app = Slim::getInstance();  
     $charset = $app->request->headers->get('ACCEPT_CHARSET'); 
     }; 
    } 

: 내 PHP 파일처럼 보인다. 또한 직접 머리글을 가져 오려고 시도했습니다.

$device_id = $_SERVER['HTTP_DEVICE_ID']; 

그러나이 또한 실패했습니다. 머리글을 얻을 수있는 방법에 대한 아이디어가 있습니까?

답변

0

나는 다음과 폐쇄에 물건을 포장하지 작업을 수행하는 것이 좋습니다 : 그것 때문에 당신의 PHP 버전/슬림 버전의의

require 'Slim/Slim.php'; 
$app = new Slim(); 
$app->get('/project/:id', add_authorize(), 'getProject'); 
$app->run(); 
function getProject($project_title) { 
    //connect to database and return project details 
} 

function add_authorize() use ($app) { 
    $charset = $app->request->headers->get('ACCEPT_CHARSET'); 
} 
1

확실하지합니다.

"require": { 
    "slim/slim": "2.3.*" 
} 

나는 맥 OSX 요세미티에 PHP 5.5.14을 사용하고 있습니다 : 이것은 내 composer.json 파일입니다.

// closure callback 
function getProject($id) 
{ 
    // connect to database and return project details 
    // var_dump($id); 
} 

// act as a middleware, the first argument is \Slim\Route 
function addAuthorize($route) 
{ 
    // var_dump($route); // \Slim\Route 

    $app = Slim::getInstance(); 
    $request = $app->request(); 

    $charset = $request->headers->get('ACCEPT_CHARSET'); 
} 

$app->get('/project/:id', 'addAuthorize', 'getProject'); 

// Turn on the light 
$app->run(); 
0

문제는이

$app->request->headers->get('ACCEPT_CHARSET'); 

같은 HTTP 헤더을 얻어내는 것이 목적입니다 그리고 그 슬림 버전 2.x를 한 후 작동 : 어쨌든,이 시도 1.x와 같은 이전 버전이있을 것입니다.

게터없이 HTTP 헤더이 같았다에 액세스 할 수있는 이전 방법 :

$app->request->headers('ACCEPT_CHARSET'); 

당신은 단순히 코드에 그 변경 또는 슬림의 새로운 버전에 이동할 수 있습니다.

예를 들어 버전 1.6.7의 슬림 문서 https://github.com/codeguy/Slim/blob/1.6.7/docs/request-headers.markdown

관련 문제