我正在尝试为在 Yii 2.0.5 中创建的 Web 服务创建一个请求和响应记录器,用于调试目的。
基本上我的动机是跟踪所有的请求、请求数据、响应数据,为此我使用了 Yii 事件。到目前为止,我已经编写了这样的代码:
用户控制器
use yii\rest\ActiveController;
use yii\base\Event;
use yii\web\Response;
Event::on(ActiveController::className(), ActiveController::EVENT_AFTER_ACTION, ['app\models\LogHandler', 'saveRequest'], ['request' => Yii::$app->request->getRawBody(), 'response' => Yii::$app->response->content]);
class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_XML;
return $behaviors;
}
// POST demo
public function actionDemo()
{
$data = array('status' => 200, 'message' => 'Success');
return $data;
}
}
在上面的代码中,如果你注意到了,那么我使用了类级别的事件处理程序(doc)。在这里,我试图捕获Controllers
EVENT_AFTER_ACTION
事件并将Request
&Response
对象传递给我LogHandler
的static
方法。但是,在我的处理程序中,我能够获取请求的原始正文,但无法获取actionDemo()
返回的响应数据。
日志处理程序
namespace app\models;
use yii\db\ActiveRecord;
class LogHandler extends ActiveRecord
{
public static function tableName()
{
return 'request_log';
}
public static function saveRequest($event)
{
// self::load($event);
// self::save();
var_dump($event);
}
}
我如何获得响应数据以及...