我试图实现http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api,并在指定的函数中遇到了一些问题。下面是我的功能,但首先让我解释一下这个问题。从示例实现Yii RESTful API - 生成500错误的_sendResponse函数
我有一个abstract class BaseAPIController extends Controller
有功能。我有一个SomeObjectController extends BaseAPIController
。在我的actionList
功能我有行:
$this->_sendResponse(200, CJSON::encode($rows), 'application/json');
,其生成期望的输出。但是,状态码是500!
即使当我这样做:
$this->_sendResponse(200, ' ', 'application/json');
我仍然得到500状态!
但是当我做
$this->_sendResponse(200);
一切都很好,我与状态码200
这是推动我疯了预期的空响应!我需要做些什么来实现这个目标?
protected function _sendResponse($status = 200, $body = '', $content_type='text/html')
{
$status_header = 'HTTP/1.1 ' . $status . ' ' . $this->_getStatusCodeMessage($status);
header($status_header);
header('Content-Type: ' . $content_type);
if ($body != '')
{
echo $body;
}
else
{
$message = '';
switch($status)
{
case 401:
$message = 'Not authorized.';
break;
case 404:
$message = 'Not found.';
break;
case 500:
$message = 'Internal server error.';
break;
case 501:
$message = 'Method not implemented.';
break;
default:
break;
}
$signature = ($_SERVER['SERVER_SIGNATURE'] == '') ?
$_SERVER['SERVER_SOFTWARE'] . ' Server at ' . $_SERVER['SERVER_NAME'] . ' Port ' . $_SERVER['SERVER_PORT'] :
$_SERVER['SERVER_SIGNATURE'];
// Needs to be completed with templates.
$body = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http="Content-Type" content="text/html"; charset=iso-8859-1">
<title>' . $status . ' ' . $this->_getStatusCodeMessage($status) . '</title>
</head>
<body>
<h1>' . $this->_getStatusCodeMessage($status) . '</h1>
<p>' . $message . '</p>
<hr />
</body>
</html>
';
echo $body;
}
Yii:app()->end();
}
你在哪里指定了_getStatusCodeMessage的代码?在你的BaseAPIController中?您是否使用导致问题的accessFilters? – acorncom 2012-04-17 13:05:54
@acorncom它是在'BaseAPIController'中指定的,是的。该基础控制器是一个抽象类。 – 2012-04-17 17:51:05
我想我的问题是,如果你在_sendResponse(例如,它进入函数后立即打印出$ status),它已被更改为$ status = 500,或者是与_getStatusCodeMessage()有一些小故障? – acorncom 2012-04-17 21:46:47