我已经在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? 预先感谢。
答案 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请求。