我使用Slim Framework作为API。我正在向它发出GET请求。但我无法获得标题。我的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() {
return function (){
$app = Slim::getInstance();
$charset = $app->request->headers->get('ACCEPT_CHARSET');
};
}
我收到回复:
( ! ) 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
我已经尝试了一切,但无济于事。我也尝试直接使用标题:
$device_id = $_SERVER['HTTP_DEVICE_ID'];
但这也失败了。我有什么想法可以获得标题吗?
答案 0 :(得分:1)
不确定是否因为您的PHP版本/ Slim版本。这是我的composer.json
文件:
"require": {
"slim/slim": "2.3.*"
}
我在Mac OSX Yosemite上使用PHP 5.5.14。但无论如何,试试这个:
// 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();
答案 1 :(得分:0)
我建议执行以下操作,而不是将内容包装在闭包中:
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');
}
答案 2 :(得分:0)
问题是你正试图获得像这样的HTTP标头
$app->request->headers->get('ACCEPT_CHARSET');
这在Slim版本2.x之后有效。你可能有一个以前的版本,比如1.x。
以前访问HTTP标头的方法是这样的,没有getter:
$app->request->headers('ACCEPT_CHARSET');
您可以在代码中更改它,或者转移到新版本的Slim。
这里的示例是版本1.6.7的Slim Documentation https://github.com/codeguy/Slim/blob/1.6.7/docs/request-headers.markdown