簡體   English   中英

yii2 ActiveController中的Delete和DeleteAll操作覆蓋

[英]Delete and DeleteAll action override in yii2 ActiveController

大家好,我在yii2實現了yii2 API,並且在ActionDeleteActionDeleteall中有沖突

當我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM