Yii2:为单个$form->textInput()自定义包装器 div.form-group



>当我在表单的模板中添加类时。所有窗体组都与分配的类一起显示:

/views/user/_form.php

<?php
use yiihelpersHtml;
use yiihelpersUrl;
use yiiwidgetsActiveForm;

$disabled_user = !$model->assign_user?'disabled':'';
?>
<?php $form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data'],
'fieldClass' => 'appcomponentsformFormGroupWidget',
'fieldConfig' => ['options' => ['class' => 'form-group label-floating']],
]); ?>

但是当我在小部件模板中执行此操作时,并非所有人都提出了我分配的类。

/components/form/FormGroupWidget.php

namespace appcomponentsform;
use yiiwidgetsActiveField;
use yiiwebView;
class FormGroupWidget extends ActiveField{
public function textInput( $options = []){
$this->template ='{label}
{input}
<div class="error">{error}{hint}
</div>
';
$this->form->fieldConfig['options']['class'] = 'form-group label-floating';
return parent::textInput($options);
}
}

我想在小部件中配置所有内容,而不是在表单模板中配置所有内容。我不明白为什么它在小部件中不起作用。第一个输入文本没有我的类,而其他文本有:

Result HTML

<div class="form-group">
<label class="control-label">No. de identificación</label>
<input type="text" class="form-control" name="UserForm[identification_number]">
</div>
<div class="form-group label-floating">
<label class="control-label">Nombre</label>
<input type="text" class="form-control" name="UserForm[name]">
</div>

如果您查看文档中的$options,则需要使用$options而不是覆盖$form->fieldConfigActiveField

@var字段的 HTML 属性(名称-值对)排列 容器标记。这些值将使用 HTML 编码 [[Html::encode()]]。如果值null,则相应的属性 不会呈现。可识别以下特殊选项:

  • tag:容器元素的标记名称。默认为div。将其设置为false不会呈现容器标记。参见 [[\yii\helpers\Html::tag()]]。

如果为容器元素设置自定义id,则可能需要 相应地调整 [[$selectors]]。

这意味着,如果需要以name=>value对的形式为容器元素指定除div以外的tag

此外,您应该调用父函数,然后覆盖您的设置并从您的函数返回$this,将函数更改为以下内容

public function textInput( $options = [] ) {
parent::textInput ( $options );
$this->template = '{label}
{input}
<div class="error">{error}{hint}
</div>
';
$this->options=['class'=>'form-group label-floating']
return $this;
}

希望对你有帮助

最新更新