大家好,我正在yii2
实施restful api并在ActionDelete
和ActionDeleteall
当我在像http://localhost/yii2-api/api/modules/v1/countries/CD
这样的网址中传递一个参数时,它可以正常运行并使用CD
请求从数据库中删除记录DELETE
。我不知道如何在网址中传递多个codes
,以便重定向到actionDeleteall
。这是我的controller
代码。
class CountryController extends ActiveController
{
public $modelClass = 'api\modules\v1\models\Country';
public function actions()
{
$actions = parent::actions();
unset($actions['index']);
unset($actions['create']);
unset($actions['delete']);
unset($actions['update']);
unset($actions['view']);
return $actions;
}
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);
}
}
public function actionDeleteall()
{
$ids=json_decode($_REQUEST['codes']);
$data=array();
foreach($ids as $id)
{
$model=$this->findModel($id);
if($model->delete())
$data[]=array_filter($model->attributes);
else
{
$this->setHeader(400);
echo json_encode(array('status'=>0,'error_code'=>400,'errors'=>$model->errors),JSON_PRETTY_PRINT);
return;
}
}
$this->setHeader(200);
echo json_encode(array('status'=>1,'data'=>$data),JSON_PRETTY_PRINT);
}
}
这是我的urlmanager
代码
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => 'v1/country', // our country api rule,
'tokens' => [
'{id}' => '<id:\\w+>'
],
]
],
]
让我知道如何覆盖该操作并通过多个codes
访问它。谢谢
答案 0 :(得分:1)
您可以发布一个id值数组数组并执行循环
这只是一个简短的建议 显然,你应该评估一个正确的错误,产生一个回声管理
public function actionDelete($myArray)
{
foreach( $myArray as $key => $value){
$model=$this->findModel($value)
$model->delete();
}
}
如果你有
中的id数组 $myArray[0] = 'CD';
$myArray[1] = 'AA';
网址应为
http://localhost/yii2-api/api/horsebuzz/api/web/v1/countries/myArray=[27,28]
或者,如果您使用代码,请使用actionDelete($ code)...广告
或者更好,如果使用UrlHelper
Url::to(['/countries/delete' , 'myArray' => [27,28] ]);
Url::to(['/countries/delete' , 'myArray' => $myArray ]);
答案 1 :(得分:1)
首先在urlmanager中禁用严格解析
'enableStrictParsing' => false
然后您可以使用任何方法调用自定义操作 网址看起来像
http://localhost/yii2-api/api/web/v1/country/uraction