yii2 ActiveController 中的 Delete 和 DeleteAll 操作覆盖
Delete and DeleteAll action override in yii2 ActiveController
大家好,我在 yii2
中实施 restful 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
访问它。谢谢
您可以 post 一个 id 值数组并执行循环
这只是一个简短的建议
显然,您应该评估一个正确的错误以及由此产生的回声管理
public function actionDelete($myArray)
{
foreach( $myArray as $key => $value){
$model=$this->findModel($value)
$model->delete();
}
}
如果你在
中有你的 id 数组
$myArray[0] = 'CD';
$myArray[1] = 'AA';
url 应该是
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 ]);
首先在urlmanager
中禁用严格解析
'enableStrictParsing' => false
然后您可以使用任何方法调用您的自定义操作
url 看起来像
http://localhost/yii2-api/api/web/v1/country/uraction
大家好,我在 yii2
中实施 restful 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
访问它。谢谢
您可以 post 一个 id 值数组并执行循环
这只是一个简短的建议
显然,您应该评估一个正确的错误以及由此产生的回声管理
public function actionDelete($myArray)
{
foreach( $myArray as $key => $value){
$model=$this->findModel($value)
$model->delete();
}
}
如果你在
中有你的 id 数组 $myArray[0] = 'CD';
$myArray[1] = 'AA';
url 应该是
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 ]);
首先在urlmanager
中禁用严格解析'enableStrictParsing' => false
然后您可以使用任何方法调用您的自定义操作 url 看起来像
http://localhost/yii2-api/api/web/v1/country/uraction