\yii\base\Widget::run()
должен возвращать строку (все виджеты в основном)
Все, что вы должны сделать в методе run()
, это вывод или рендеринг контента, и вы пытаетесь вернуть объект Response в виде return ActiveForm::validate($model);
и return Yii::$app->controller->redirect(..)
я предлагаю вам переместить весь код, который должен обрабатывать отправку формы, в собственное действие
SiteController extends controller {
public function actionRegisterParticipant {
$model = new Participants();
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post())) {
$list = implode(", ", $model->sections);
$model->sections = $list;
$model->save();
Yii::$app->session->setFlash(Alert::TYPE_SUCCESS, [
[
'title' => 'Congratulations!',
'text' => 'You are registered on the forum. Check out your email to get news about forum.',
'confirmButtonText' => 'Done!',
]
]);
return Yii::$app->controller->redirect(Yii::$app->request->referrer ?: Yii::$app->homeUrl);
}
// ...
}
и форма в представлении виджета всегда должна указывать на это действие:
<?php $form = ActiveForm::begin(['action' => 'site/register-participant']);?>
...
<?= $form->field($model, 'email', ['enableAjaxValidation' => true])->textInput(['placeholder' => 'Email']); ?>