使用Retrofit方法删除的Yii2调用

时间:2019-02-13 20:49:32

标签: android rest yii2 retrofit

我已经在Yii2控制器中重写了delete方法,但是我无法从带有库Retrofit的Android应用程序中调用它。

public function actionDelete($id)
    {
        $model=$this->findModel($id);
        if($model->delete())
        {
            $this->setHeader(200);
            echo json_encode(array('status'=>1,'data'=>array_filter($model->attributes)),JSON_PRETTY_PRINT);
        }
        else
        {
            $this->setHeader(400);
            echo json_encode(array('status'=>0,'error_code'=>400,'errors'=>$model->errors),JSON_PRETTY_PRINT);
        }
    }

我尝试了2种版本的通话: 首先

@DELETE("posts/delete/{id}")

 @DELETE("posts/{id}")

Call<Void> deletePosts(@Path("id") int id);

但是我收到错误404。那么我应该如何正确调用此方法?

当我尝试调用未重写的方法时,出现错误500。 也许有人知道如何将删除方法从Android调用到Yii2 rest? 预先感谢。

1 个答案:

答案 0 :(得分:0)

要像public function actionDelete($id)一样传递参数,您需要调用/posts/delete?id=<id>,而不仅仅是/posts/delete/<id>。但是,弄错这个错误应该导致HTTP 400错误请求错误,而不是404未找到错误。

出现404错误的可能原因:我假设$model=$this->findModel($id);是生成的代码。如果是这样,如果找不到具有给定ID的模型,则很可能引发NotFoundHttpException异常。

您可以检查的另一件事是,是否在控制器的behaviors()方法中将VerbFilter配置为仅允许POST请求执行删除操作。您可能正在发送GET请求。