我正在尝试使用PHP Slim框架创建一个get路由。
<?php
$app->get('/bands', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
每当我调用此路由时,我都会收到500 Server Error,而我的PHP日志表明$app
为空。但是,如果我将路线更改为:
<?php
$app->get('/band', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
一切都按预期运作。有一些关于&#39; s&#39;在乐队路线。我不能放一个&#39;在乐队上使它成为乐队。
更新:没有带有&#39;&#39;在最后的工作!
我只是不明白为什么会这样。任何帮助将不胜感激。
如果你想知道echoResponse(200,$response);
做了什么,它只需要获取数组并将其作为JSON对象返回给浏览器,HTTP响应为200 Success。这就是它的样子:
function echoResponse($status_code, $response) {
$app = \Slim\Slim::getInstance();
// Http response code
$app->status($status_code);
// setting response content type to json
$app->contentType('application/json');
echo json_encode($response);
}
这是我的index.php:
<?php
require 'libs/Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
// The separate files that serve the routes
require_once 'bands.php';
require_once 'users.php';
require_once 'instructors.php';
require_once 'musicians.php';
function echoResponse($status_code, $response) {
$app = \Slim\Slim::getInstance();
// Http response code
$app->status($status_code);
// setting response content type to json
$app->contentType('application/json');
echo json_encode($response);
}
$app->run();
然后我的路线包含在上述所需文件中:
波段:
<?php
$app->get('/bands', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
用户:
<?php
$app->get('/users', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
音乐家:
<?php
$app->get('/musicians', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
导师:
<?php
$app->get('/instructors', function() {
$response["test"] = 'tester';
echoResponse(200, $response);
});
如果删除后面的&#39;
,以上所有路线都有效如果有帮助的话。这是我的.htaccess:
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
答案 0 :(得分:1)
Apache是罪魁祸首,这与Slim无关。您启用了多视图,并且Web服务器与php文件(bands.php)匹配。请求永远不会达到Slim。
要使您的路线正常工作,请将此行添加到.htaccess文件的开头:
Options -Multiviews
有关具体情况的进一步说明,来自Apache docs的代码段:
MultiViews的效果如下:如果服务器收到了 请求/ some / dir / foo,如果/ some / dir启用了MultiViews,并且 / some / dir / foo不存在,然后服务器读取目录 寻找名为foo。*的文件,并有效地伪造一个类型地图 它命名所有这些文件,为它们分配相同的媒体类型和 如果客户要求其中一个,它将具有内容编码 他们的名字。然后它选择与客户的最佳匹配 要求。