ActiveForm внутри ActiveForm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

ActiveForm внутри ActiveForm

Сообщение porcelanosa » 2016.07.10, 14:42

Есть обычная ActiveForm()
C помощью Widget вставляется другая.
Т.е. по сути получается:

Код: Выделить всё

<?php $form = ActiveForm::begin( [ 'id'=>'cats-form','options' => [ 'enctype' => 'multipart/form-data' ] ] ); 
        echo $form->field( $model, 'name' )->textInput( [ 'maxlength' => true ] )
                //  вложенная форма
                $seoform = ActiveForm::begin(['id'=>'seo']); 
                    echo  $seoform->field($model, 'meta_descr');
                  ActiveForm::end();
            echo Html::submitButton( )
ActiveForm::end(); ?>
Так вот кнопка сабмит перестает работать в этом случае.
В HTML коде видно, что она за пределами тэгов <form></form>

Если во вложенной ActiveForm оставить кнопку Submit, то всё работает как надо.
Можно конечно сделать кнопку "виртуальной" т.е. обрабатывать ее нажатие через JS - но поскольку это всё находится в расширении, не хотелось бы лишних движений при настройке расширения.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: ActiveForm внутри ActiveForm

Сообщение ElisDN » 2016.07.10, 15:17

Сам HTML не умеет вложенные формы. Так что от вложенности лучше избавиться. Например, сделать так, чтобы если виджету передать $form в параметрах, то он будет использовать этот объект и не будет выводить свою строку с ActiveForm:

Код: Выделить всё

<?php $form = ActiveForm::begin( [ 'id'=>'cats-form','options' => [ 'enctype' => 'multipart/form-data' ] ] ); 
    echo $form->field( $model, 'name' )->textInput( [ 'maxlength' => true ] )
    echo $form->field( $model, 'name' )->textInput( [ 'maxlength' => true ] )
    echo SeoForm::widget(['model' => $model, 'form' => $form]);
    echo Html::submitButton( )
ActiveForm::end(); ?>

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: ActiveForm внутри ActiveForm

Сообщение porcelanosa » 2016.07.10, 17:40

Я хотела добавлять к любой модели SEO поля -
При этом хранятся они в отдельной модели (таблице).
Можно было бы вручную вставить эти поля отдельно - Html::textInput('meta_descr') - и потом в поведении обрабатывать валидацию и сохранение.
Но хотелось бы использовать преимущества ActiveForm.
Сейчас если я передам в виджет $form - это будет всё тот же Cats
А как тогда добавить поля из, грубо говоря, SeoForm в
... выше - это просто размышления вслух...
О как просто...
https://github.com/porcelanosa/yii2-seo ... et.php#L41 UPD - пока не доделано
Спасибо.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

Закрыто