YII2:不同activeform表单中的相同元素及其ID

YII2:不同activeform表单中的相同元素及其ID,yii2,activemodel,Yii2,Activemodel,我正在与YII2(一个交友网站)建立一个项目。我有几个“表单模型”,我指的是用于使用activeform创建表单的模型。在某些表单/模型中,我有相同的字段,例如“注册”页面和“个人资料”页面中的“性别”和“位置”字段。只有一些字段是相同的,其他字段是不同的,所以我不能对不同的页面/表单使用相同的模型 现在的问题是,当我使用不同的模型来创建activerecord表单时,字段的ID和CSS类也不同 例如,我有一个名为“SignupForm”的模型和一个名为“EditProfileForm”的模型。

我正在与YII2(一个交友网站)建立一个项目。我有几个“表单模型”,我指的是用于使用activeform创建表单的模型。在某些表单/模型中,我有相同的字段,例如“注册”页面和“个人资料”页面中的“性别”和“位置”字段。只有一些字段是相同的,其他字段是不同的,所以我不能对不同的页面/表单使用相同的模型

现在的问题是,当我使用不同的模型来创建activerecord表单时,字段的ID和CSS类也不同

例如,我有一个名为“SignupForm”的模型和一个名为“EditProfileForm”的模型。在视图(模板)中,我有一个这样的代码

<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field') ?>
<?php ActiveForm::end(); ?>

如果我为不同的模型执行此代码,我会得到不同的字段名(ID): “editprofileform”模型的“editprofileform-test_字段”ID 和 “signupform”模型的“signupform-test_字段”ID

为什么会这样?因为我想对相同的元素应用相同的CSS样式和JavaScript处理程序。对于使用不同模型生成的activeforms,有没有办法使ID和CSS类相同

已编辑

一种解决方案(由@marche发布)是在文本字段中添加ID参数

<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
    'class' => 'some-css-class',
    'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>

它适用于文本输入,但我也有自动完成小部件

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [

    'clientOptions' =>[
        'source' => new JsExpression("function( request, response ) {
          $.getJSON('/my-script?country='+country_id, {
            term: request.term 
          }, response );
        }
    ")
    ],
],['id'=>'my-test-id']) ?>


如您所见,我尝试将ID参数添加到AutoComplete,但它不起作用。请告诉我如何将ID参数分配给自动完成小部件。

您可以向每个字段添加一个类或指定其ID>

<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
    'class' => 'some-css-class',
    'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>

如果添加该类,则可以在以后重用它们,或者在希望将相同样式与2+个元素一起使用时使用它们。否则,您将定义id,因此框架将不会自动生成它

编辑

对于小部件,您需要在如下选项中添加id或类:

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [
    'options' => [
        'id' => 'my-test-id',
        'class' => 'my-css-class',
    ],
    'clientOptions' => [
        'source' => new JsExpression("function( request, response ) {
            $.getJSON('/my-script?country='+country_id, {
                term: request.term 
            }, response );
        }
    ")
    ],
]) ?>

您可以向每个字段添加类或指定其id>

<?php $form = ActiveForm::begin(['id' => 'form']); ?>
<?= $form->field($model, 'test_field')->textInput([
    'class' => 'some-css-class',
    'id' => 'my-id',
]) ?>
<?php ActiveForm::end(); ?>

如果添加该类,则可以在以后重用它们,或者在希望将相同样式与2+个元素一起使用时使用它们。否则,您将定义id,因此框架将不会自动生成它

编辑

对于小部件,您需要在如下选项中添加id或类:

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [
    'options' => [
        'id' => 'my-test-id',
        'class' => 'my-css-class',
    ],
    'clientOptions' => [
        'source' => new JsExpression("function( request, response ) {
            $.getJSON('/my-script?country='+country_id, {
                term: request.term 
            }, response );
        }
    ")
    ],
]) ?>

您可以对自动完成小部件执行相同的操作,例如:(对于类,您应该使用选项)


您可以使用自动完成小部件执行相同的操作,例如:(对于类,您应该使用选项)


谢谢你的回答。它适用于文本字段,但我不能使它适用于自动完成小部件字段。请看编辑的问题编辑我的回答。谢谢你的回答。它适用于文本字段,但我不能使它适用于自动完成小部件字段。请参阅已编辑的问题已编辑我的回答。您的答案是正确的,但无法接受2个答案。所以我接受了第一个。对不起,您的答案是正确的,但无法接受两个答案。所以我接受了第一个。很抱歉