如何在 YII2 中使用 PJAX 处理来自控制器的错误?

How to handle error from controller using PJAX in YII2?

我正在使用 Yii2 Pjax 小部件,它无法从控制器中抛出错误,因此当控制器出现任何错误时我无法为用户记录错误。

PJAX 代码

 <?php Pjax::begin([
            'id' => 'createBucketPjax',
            'timeout' => 4000,
            'formSelector' => '#createBucketForm',
            'enablePushState' => false,
            'clientOptions' => [
                'skipOuterContainers' => true,
                'error' => new JsExpression("function(event) { 
                    alert('Anything');
                }"),
            ]
        ]); ?>

控制器代码:

   if(!$fieldModel->save()){
                        $transaction->rollBack();
                        //Here I want to send error 
                        $error = $fieldModel->getErrorsString();
                        return [
                           'success' => false,'error' => $error
                               ];
                       
                    }else{
 return $this->renderAjax('create', [
                            'model' => $model
                        ]);
}

我尝试了以下 clientOptions 但没有用

'error' => new JsExpression("function(event) { 
                    alert('Please work');
                }"),

也用过 javascript 但没有帮助:-

 $(document).on('pjax:error', function(event) {
        console.log(event);
      })

有什么方法可以从 yii2 中的控制器发送 404 吗?这实际上可以解决我的问题

来自 Yii2 Pjax docs

In responding to the AJAX request, Pjax will send the updated body content (based on the AJAX request) to the client which will replace the old content with the new one. The browser's URL will then be updated using pushState. The whole process requires no reloading of the layout or resources (js, css)

您必须处理完整形式的内容,而不是 json。

因此您的代码必须如下所示(始终 return 形式 html 返回):

if(!$model->save()){
   $transaction->rollBack();
}

return $this->renderAjax('create', [
   'model' => $model
]);