1

我正在尝试使用 yii 设置一个宁静的 api。尝试添加一个包装器,该包装器从控制器中运行的代码中获取结果并以 json 格式返回。我也试图让它捕获任何错误 [try-catch] 并以 json 格式返回它们。

现在我能想到的只是类似于下面的代码......我希望能够不必每次都添加 try/catch。

class UserController extends Controller{

    public function actionIndex($user_id = null){
        $response = new API_Response();

        try{
            $response->success = true;
            $response->data = array("data"=>"data goes here...");
        }catch(Exception $e){
            $response->success = false;
            $response->message = $e->getMessage();
        }

        $response->send();
    }
4

1 回答 1

2

通过更多研究,发现我可以覆盖每个控制器的 api 处理程序,所以现在我不必编写一大堆 try-catch。

function init(){
    $this->api_resp = new API_Response();
    Yii::app()->attachEventHandler('onException',array($this, 'handleApiError'));
}
public function handleApiError(CEvent $e){
    if($e instanceof CExceptionEvent){
        $this->api_resp->error = $e->exception->getMessage();
        $this->api_resp->send();
    }else{
        $this->api_resp->error = Yii::t('app', 'error.unknown');
        $this->api_resp->send();
    }
}
于 2013-10-09T04:29:20.570 回答