1

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();
    }
4

1 に答える 1

2

@acorncom に触発された調査のおかげで、エラー ログを確認しました。

PHP Fatal error: Call to undefined function app() in /Library/WebServer/Documents/iK9/iK9/iK9/protected/modules/api/controllers/BaseAPIController.php on line 68

もちろん、構文エラーがありました。Yii::app()->end();私が持っていた代わりにYii:app()->end()

スタック トレースが生成されなかった理由について誰かが教えてくれたら、知りたいです。

于 2012-04-18T05:18:30.227 に答える