Сгенерируйте одно поле формы с помощью ActiveField без использования шаблона в Yii2

Я использую Yii2 PHP-фреймворк и использую ActiveField (Bootstrap Version) для создания полей формы используется Свойство $template, которое включает в себя теги упаковки и тому подобное.

Мне интересно, возможно ли создать одно поле в форме без использования шаблона, в то время как все остальные поля делают.

Я спрашиваю, потому что хочу, чтобы он генерировал скрытое поле, которое я сейчас делаю, например:

<?= $form->field($model, 'some_id')->hiddenInput(['value' => $some_id])->label(false); ?>

Это прекрасно работает, однако поскольку оно помещается в стандартное поле html, margin-bottom, которое я установил для класса .form-group, также добавляется к этому и вызывает нежелательное поле.

Я знаю, что могу вручную вставить это поле, но тогда оно не получит правильное имя формы для поля, например MyForm[some_id].


person Brett    schedule 01.10.2016    source источник


Ответы (2)


Основываясь на информации, предоставленной Кираном Мурали ответом, я провел небольшое расследование и обнаружил, что вы можете удалить элементы оболочки полностью и просто вывести фактическое поле input, что я и хотел.

<?= $form->field($model, 'some_id', ['template' => '{input}',
'options' => ['tag' => false]])->hiddenInput(['value' => $some_id])->label(false); ?>

Обратите внимание на добавление части 'tag' => false внутрь массива options.

Примечание. Вы должны использовать Yii >= 2.0.8, чтобы это работало правильно, так как до этого была ошибка, указанная как:

Enh #10764: yii\helpers\Html::tag() и ::beginTag() возвращают содержимое без HTML, если атрибут $tag имеет значение false или null (pana1990)

person Brett    schedule 02.10.2016
comment
Да, хорошая информация, и если вы укажете тег как «span», тогда поле будет окружено тегом span. - person Kiran Muralee; 02.10.2016

Попробуй это

 <?= $form->field($model, 'some_id',
            ['template' => '{input}{error}',
             'options' => ['class' => 'your-class']]) ->
            hiddenInput(["value" => $someVal,
                         "class" => "your-class"
                ]) ?>

Свойство options указывает атрибуты HTML (пары имя-значение) для тега контейнера поля. Я думаю, это решит вашу проблему, поскольку значение margin-bottom, помещенное в класс form-group, больше не влияет.

person Kiran Muralee    schedule 01.10.2016
comment
Да, я знаю, но предостережение в том, что это не позволит проверить поле. - person Brett; 01.10.2016
comment
@Brett Хорошо, теперь я внес изменения в ответ, проведя небольшое исследование. Проверьте, это то, что вам нужно. Я предотвратил добавление класса .form-group во ввод, а также окружающий его div. - person Kiran Muralee; 01.10.2016
comment
Я только что нашел способ полностью удалить тег упаковки; Я опубликую ответ. - person Brett; 02.10.2016