http://www.yiiframework.com/wiki/175/how-to-create-a-rest-apiを実装しようとしていますが、指定された_sendResponse
機能に問題があります。以下は私の機能ですが、最初に問題を説明させてください。
私はabstract class BaseAPIController extends Controller
その_sendResponse
機能を持っています。私は持ってい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();
}