Как изменить класс div группы форм ActiveField в YII2

у меня такой шаблон:

<div class="form-group form-file-upload form-file-multiple">
<input type="file" multiple="" class="inputFileHidden">
<div class="input-group">
    <input type="text" class="form-control inputFileVisible" placeholder="Single File">
    <span class="input-group-btn">
        <button type="button" class="btn btn-fab btn-round btn-primary">
            <i class="material-icons">attach_file</i>
        </button>
    </span>
</div>

я использую фреймворк yii2 и пытаюсь настроить файл ввода поля,

<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'file_name')->fileInput(); ?>
<div class="form-group">
    <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>

Я пытаюсь искать в Интернете, но могу изменить только класс div из группы, как это

<?php $form = ActiveForm::begin([
'fieldConfig' => ['options' => ['class' => 'form-group invisible']],
 ]); ?>

Помогите, пожалуйста, как мне добавить

<input type="file" multiple="" class="inputFileHidden">
<div class="input-group">
<input type="text" class="form-control inputFileVisible" placeholder="Single File">
<span class="input-group-btn">
    <button type="button" class="btn btn-fab btn-round btn-primary">
        <i class="material-icons">attach_file</i>
    </button>
</span>

в одну группу форм div?


person eniac05    schedule 29.10.2019    source источник


Ответы (2)


Если вам не нужно использовать функцию проверки клиента активной формы, вам не нужно использовать $form->field() для создания входных данных. Вы можете использовать yii\helpers\Html вместо yii\widgets\ActiveForm, чтобы лучше контролировать сгенерированный HTML.

У вас может быть такой шаблон:

<?php

use yii\helpers\Html;
echo Html::beginForm(
    ['controller/action'],
    'post',
    ['enctype' => 'multipart/form-data'] //if you want to upload file with post
); ?>
    <div class="form-group form-file-upload form-file-multiple">
        <?= Html::activeFileInput(
            $model,
            'file_name',
            ['class' => 'inputFileHidden', 'multiple' => '']
        ); ?>
        <div class="input-group">
            <?= Html::activeTextInput(
                $model,
                'file_name', 
                [
                    'class' => 'form-control inputFileVisible',
                    'placeholder' => 'Single File'
                ]
            ); ?>
            <span class="input-group-btn">
                <button type="button" class="btn btn-fab btn-round btn-primary">
                    <i class="material-icons">attach_file</i>
                </button>
            </span>
        </div>
    </div>   
<?= Html::endForm(); ?>

Вы можете использовать Html::error() и Html::errorSummary() для отображения ошибок. Дополнительную информацию см. в документации по HTML-помощнику.

Другой вариант — реализовать собственный виджет, расширяющий yii\widgets\InputWidget. Вы будете реализовывать метод run() и генерировать там необходимый html-код. Затем вы можете использовать свой виджет, например, как $form->field(...)->widget(YourWidget::class).

документация по InputWidget.

person Michal Hynčica    schedule 29.10.2019
comment
спасибо за ваш ответ, это работает, но как я могу получить подтверждение? - person eniac05; 31.10.2019
comment
Проверка на стороне сервера должна работать нормально. Если вам нужна проверка на стороне клиента, вы должны частично реализовать ее самостоятельно. Вы можете использовать clientValidateAttribute() метод валидаторов, чтобы получить код JS для проверки поля. см. документы. Если вам нужна проверка на стороне клиента для других полей, а не для ввода файла, вы все равно можете использовать ActiveForm для других полей и использовать помощник Html только для ввода файла (пропустите Html::beginForm и Html::endForm) - person Michal Hynčica; 31.10.2019
comment
моя проверка на стороне сервера не работает, проверка игнорирует правило расширения файла, но не с правилом длины строки (макс.), но, возможно, я опубликую еще один вопрос об этом. - person eniac05; 31.10.2019

Фреймворк Yii2. Чтобы изменить/добавить классы группы форм, используйте свойство поля: "options"

$form->field($model, "username", [
  "options" => ["class" => "form-group some-custom-class"]
])->textInput(["autocomplete" => "off"])->label('<i class="icon-user"></i> USERNAME');
person Roko C. Buljan    schedule 25.02.2021