[英]Yii2 delete ActiveRecord error message sometimes array, sometimes not?
我在Controller中有這個,是用giiant生成的(我認為是正確的):
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 ...
if is_array then ...[0] otherwise ...
但是我覺得這不是解決問題的正確方法。 模型如何更改此錯誤消息的數據類型? 您能指出我正確的方向嗎? 非常感謝。
首先,您實際上從未在這里使用模型驗證,因此它與模型無關。 其次, $msg
可能還可以,問題在於您如何使用getFlash()
。 此方法可能會返回數組,這是預期的並已記錄在案:
Flash消息或消息數組(如果使用addFlash)。
您應該遍歷getFlash()
結果以獲取字符串形式的實際消息,或者使用將處理該問題並從getFlash()
結果生成多個警報的小部件。
您也可以使用setFlash()
代替addFlash()
。 但我不建議這樣做-很容易覆蓋以前的某些閃爍,並且您不應該盲目地假設getFlash()
結果將是一個字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.