lav45/yii2-ajax-create

This widget is designed to quickly create missing related entities when filling out the form.

Installs: 6 562

Dependents: 1

Suggesters: 0

Security: 0

Stars: 7

Watchers: 4

Forks: 6

Type:yii2-extension

1.0.0 2024-10-26 20:38 UTC

This package is auto-updated.

Last update: 2024-12-23 15:04:59 UTC


README

Это расширение предназначено для отображния форм в модальном окне.

Установка

Предпочтительный способ установки этого через расширения composer.

Вы можете установить его из консоли

~ $ composer require lav45/yii2-ajax-create

или добавить

"lav45/yii2-ajax-create": "0.2.*"

в разделе "require" в composer.json файл.

Принцип работы

На странице создается кнопка при нажатию на которую у нас будет открываться модальное окно с формой. Если данные введены не верно тогда с сервера приходит список ошибок которые отображаются на форме в модальном окне. После успешного сохранения данных, будет обновлен контент который находится внутри блока AjaxCreate

Использование

Для начала нам нужна кнопка при нажатию на которую у нас будет открываться модальное окно. data-href - ссылка по которой открывается форма

use lav45\widget\AjaxCreate;

AjaxCreate::begin();

echo Html::button('<span class="glyphicon glyphicon-plus"></span>', [
    'data-href' => Url::toRoute(['create']),
    'class' => 'btn btn-success',
]);

AjaxCreate::end();

Пример контроллера. Для корректного отображения формы в модальном окне её нужно отобразить с помощью метода renderPartial().

class SiteController extends Controller
{
    public function actionCreate()
    {
        // ...
        return $this->renderAjax('create', [
            'model' => $model,
        ]);
    }
}

В представлении с формой в первую очередь следует переопределить ActiveForm::$autoIdPrefix на любое значение, т.к. форма будет отображаться в модальном окне на странице на которой уже присутствуют элементы с id="w1" что приведет к ошибкам при работе js кода.

// views/site/_form.php

use yii\bootstrap\ActiveForm;

ActiveForm::$autoIdPrefix = 'a';

$form = ActiveForm::begin([
    'layout' => 'horizontal',
]);
// ...