Как организовать использование виджета alert с pjax?

пытаюсь организовать вывод флеш сообщения Alertом при использовании pjax в виджете.
вот собственно код Vidget.php

namespace frontend\widget\vidget;
    
    use yii\base\Widget;
    use Yii;
    class Videt extends Widget{
        public function init(){
            parent::init();
        }
        public function run(){
            $model= new Model();
           
            if (Yii::$app->request->post()) {
                if($model->save()){
                Yii::$app->session->setFlash([
                  'success',
                   'Спасибо операция окончена']
                );
                   $this->render('html',[
                        'model'=>$model
                 ]);
                }else{
                 Yii::$app->session->setFlash([
                  'error',
                   'Извините произошла ошибка']
                );
                  $this->render('html',[
                        'model'=>$model
                 ]);
               }
            }else{
            return $this->render('html',[
                'model'=>$model
                ]);
        }
    }


вот views/html.php

use yii\widgets\Pjax;
    use yii\bootstrap\Alert;
    echo $this->render('_form',[
        'model'=>$model,
    ]);
    Pjax::begin(['id' => 'reloded']);
        echo Alert::widget();
        Pjax::end();
    $this->registerJs(
    '$("document").ready(function(){
        $("#button").on("pjax:end", function() {
             $.pjax.reload({container:"#reloded"}); 
        });
    });');
    ?>


_form.php не пишу поскольку сама форма работает и все сохраняется вот только после перезагузки pjax Alert не срабатывает. Как правильно это организовать не подскажите ?
  • Вопрос задан
  • 765 просмотров
Пригласить эксперта
Ответы на вопрос 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Мне кажется виджет вам тут не нужен, используйте стандартный метод сохранения - через экшин контроллера, ибо виджеты предназначены в основном для отображения каких то частей фронтенда. Так же увас дублирование кода очень большое, вы 3 раза рендерите вьюху, тогда как можно все это сделать 1 раз после условий. Так же нет смысла что-то записывать в сессию так как вы рендерите через pjax, вам достаточно передать сообщение во вьюху, и там его отрендерить в виде alert'a и не нужно будет использовать виджет Alert.
Controller's action:
$message = $status = null;

if (Yii::$app->request->post()) {
    if ($model->save()) {
        $status = 'success';
        $message = 'Спасибо операция окончена';
    } else {
        $status = 'error';
        $message = 'Извините произошла ошибка';
    }
}

$this->render('html', [
        'model' => $model,
        'status' => $status,
        'message' => $message,
]);


View:
<?php if ($status !== null && $message !== null): ?>
    <div class="alert alert-<?=$status?>">
      <strong><?=$status?>!</strong> <?=$message?>
    </div>
<?php endif; ?>
.......
.......
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы