Yii2有时会删除ActiveRecord错误消息数组,有时不会吗?

时间:2018-06-20 09:37:08

标签: php activerecord error-handling yii2 delete-row

我在Controller中有此文件,它是由 giant 生成的(我认为这是正确的):

public function actionDelete($id) {
    try {
        $this->findModel($id)->delete();
    } catch (\Exception $e) {
        $msg = (isset($e->errorInfo[2])) ? $e->errorInfo[2] : $e->getMessage();
        \Yii::$app->getSession()->addFlash('deleteError', $msg);
        return $this->redirect(Url::previous());
    }

    $isPivot = strstr('$id', ',');
    if ($isPivot == true) {
        return $this->redirect(Url::previous());
    } elseif (isset(\Yii::$app->session['__crudReturnUrl']) && \Yii::$app->session['__crudReturnUrl'] != '/') {
        Url::remember(null);
        $url = \Yii::$app->session['__crudReturnUrl'];
        \Yii::$app->session['__crudReturnUrl'] = null;

        return $this->redirect($url);
    } else {
        return $this->redirect(['index']);
    }
}

现在我的问题是,它有时将$msg作为数组抛出,我不知道为什么。

查看/索引:

if (\Yii::$app->session->getFlash('deleteError') !== null) {
    echo Alert::widget([
        'options' => ['class' => 'alert-danger'],
        'body' => \Yii::$app->session->getFlash('deleteError'),
    ])
;}

错误消息:

  

PHP公告– yii \ base \ ErrorException

     

数组到字符串的转换

我不知道为什么有时是数组,有时不是。所有控制器都是相同的,但是对于某些模型,它起作用,而对于某些模型,它不是。我可以实施一种if is_array then ...[0] otherwise ...的解决方法,但我认为这不是解决问题的正确方法。模型如何更改此错误消息的数据类型?您能指出我正确的方向吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

首先,您实际上从未在此处使用模型验证,因此它与模型无关。其次,hubs_matrix <- matrix(0,nrow = 50,ncol = 50,byrow = TRUE) colnames(hubs_matrix) <- paste("Hub",1:50) rownames(hubs_matrix) <- paste("Node",1:50) 可能还可以,问题在于您如何使用getFlash()。此方法可能返回数组,这是预期的并已记录:

  

Flash消息或一组消息(如果使用addFlash的话。)

您应该遍历低谷Hubs的结果以字符串的形式获取实际消息,或者使用可处理此问题并从set.seed(37) hubs_matrix <- do.call("cbind", lapply(1:50, function(x) sample(c(1, rep(0, 49)), 50))) sum_distances <- (hubs_matrix * distance_df) sum(rowSums(sum_distances)) 结果生成多个警报的小部件。

您也可以使用setFlash()代替$msg。但是我不建议这样做-可以轻松覆盖以前的某些闪烁,并且您不应该盲目地假设getFlash()结果将是字符串。