[英]Delete and DeleteAll action override in yii2 ActiveController
大家好,我在yii2
實現了yii2
API,並且在ActionDelete
和ActionDeleteall
中有沖突
當我在URL中傳遞一個參數時,例如http://localhost/yii2-api/api/modules/v1/countries/CD
它可以正常工作,並通過DELETE
請求從數據庫中刪除記錄CD
。 我不知道如何在url中傳遞多個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
訪問。 謝謝
您可以發布一個ID值數組數組並執行循環
這只是一個簡短的建議
顯然,您應該評估一個適當的錯誤,從而產生回波管理
public function actionDelete($myArray)
{
foreach( $myArray as $key => $value){
$model=$this->findModel($value)
$model->delete();
}
}
如果您有ID數組
$myArray[0] = 'CD';
$myArray[1] = 'AA';
網址應該是
HTTP://本地主機/ yii2-API / API / horsebuzz / API /網絡/ V1 /國家/ myArray的= [27,28]
或者,如果您使用代碼,請使用actionDelete($ code)...廣告,依此類推
或者更好,如果使用UrlHelper
Url::to(['/countries/delete' , 'myArray' => [27,28] ]);
Url::to(['/countries/delete' , 'myArray' => $myArray ]);
首先禁用urlmanager中的嚴格解析
'enableStrictParsing' => false
那么您可以使用網址看起來像的任何方法來調用自定義操作
http://localhost/yii2-api/api/web/v1/country/uraction
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.