Форма проверки в виджете - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы, чтобы форма была доступна на каждой странице моего веб-приложения. Поэтому я создал виджет с формой.

class AddNewURL extends Widget{

    public $model;


    public function init()
    {
        parent::init();
        if ($this->model === null) {
            $this->model = new ProductUrlForm();
        }
    }

    public function run()
    {
        return $this->render('addNewURLForm', [
            'model' => $this->model,
        ]);
    }
}

и виджет

<div class="modal fade bs-example-modal-lg" id="newURL" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog modal-lg" role="document">

        <div class="modal-content">
            <?php Pjax::begin(); ?>
            <?php $form = ActiveForm::begin([
                'action' => Url::to(['site/new-url']),
                'options' => ['data' => ['pjax' => true]],
            ]) ?>
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">Add new URL</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-md-12">
                        <?= $form->field($model, 'url', ['errorOptions' => ['class' => 'help-block', 'encode' => false]])
                            ->textInput(['maxlength' => false])
                        ?>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Add</button>
            </div>

            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </div>

    </div>
</div>

и вот как я использую этот виджет в моих раскладках / main.php

<?= \app\widgets\AddNewURL::widget() ?>

на моем сайте / новом URL действие, которое у меня есть

public function actionNewUrl()
    {
        $model = new ProductUrlForm();
        $model->status = STATUS_NEW;

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
           //return success message
        }

        return $this->render('index', [
            'model' => $model,
        ]);
    }

и теперь, когда я отправляю данные формы в мое действие, форма сбрасывается и все. Как показать сообщение об ошибке или об успешном использовании pjax? В моей модели у меня есть несколько пользовательских правил проверки.

Может быть, есть лучшее решение использовать одну форму на всех страницах?

1 Ответ

0 голосов
/ 13 ноября 2018

Действие actionNewUrl() должно отображать представление addNewURLForm, чтобы Pjax мог заменить старую форму новым html, полученным из действия.

Лучше поместить ваш виджет, контроллер и модель формы в отдельный модуль.

...