Php 从YII2 ActiveForm生成的表单中删除字段

Php 从YII2 ActiveForm生成的表单中删除字段,php,yii2,yii2-advanced-app,Php,Yii2,Yii2 Advanced App,我有一个使用yii2activeform生成的表单。如果我选择某些选项,则需要在上显示某些字段;如果我选择其他选项,则需要删除这些字段 例如,我有一个下拉帐户类型,有两个选项“个人”和“公司”。 如果用户选择“个人”,表单上的一些字段需要消失,比如公司名称,而其他一些字段需要出现,比如名字、姓氏。最初显示表单时,只有“帐户类型”字段存在 下面是我目前掌握的代码 <?php $form = ActiveForm::begin(['id' => 'account-setup-form

我有一个使用yii2activeform生成的表单。如果我选择某些选项,则需要在上显示某些字段;如果我选择其他选项,则需要删除这些字段

例如,我有一个下拉帐户类型,有两个选项“个人”和“公司”。 如果用户选择“个人”,表单上的一些字段需要消失,比如公司名称,而其他一些字段需要出现,比如名字、姓氏。最初显示表单时,只有“帐户类型”字段存在

下面是我目前掌握的代码

<?php 
 $form = ActiveForm::begin(['id' => 'account-setup-form']); ?>
 echo $form->field($modelAccMain, 'account_type')
           ->widget(Select2::classname(), [
            'data' => $accountTypeArray,
            'options' => ['placeholder' => 'Select account type'],
            ]);         
  echo $form->field($modelUsers, 'firstname')->textInput()
            ->hint('')->label('First Name');
  echo $form->field($modelUsers, 'lastname')->textInput()
            ->hint('')->label('Last Name');
<?php ActiveForm::end(); ?> 

echo$form->field($modelAccMain,'account\u type')
->小部件(选择2::classname()[
“数据”=>$accountTypeArray,
'选项'=>['占位符'=>'选择帐户类型'],
]);         
echo$form->field($modelUsers,'firstname')->textInput()
->提示(“”)->标签('First Name');
echo$form->field($modelUsers,'lastname')->textInput()
->提示(“”)->标签('Last Name');
非常感谢您的帮助

为此,首先在模型中定义它们,然后在视图中使用if语句

if ($model->isAttributeActive('attribute_name')) {
但正如@nterms所写的,如果您希望用户能够在客户端切换,javascript会更好

定义场景也有助于验证(只验证活动属性)

p、 别忘了在控制器中设置场景

$model = new MyModel(['scenario'=>'my_scenario']);

我处理它的方法是使用jquery隐藏和显示,使用下拉列表的更改事件

在javascript中

假设SELECT2小部件中的数据是数组形式的 例如:

在检查元件id上使用铬

$("#id").on("change", function(){
    if(id.value==1){
     //show a div
    }else{
     //hide a div
    }

   //for multiple values better use switch

 like this
   switch(id){
    case 1:{
       $("#divid").show();
       ......
       }
       }
})

})
我希望你能明白

对于select 2 id,您可以通过

echo $form->field($modelAccMain, 'account_type')
       ->widget(Select2::classname(), [
        'data' => $accountTypeArray,
        'options' => ['placeholder' => 'Select account type',"id"=>"mypreffereid"],
        ]); 

要在服务器中执行此操作,您需要在用户每次更改“AccountType”字段的值时提交表单。这有点恼人。我建议使用JS来实现这一点。您可以编写一些代码,根据选定的值显示/隐藏表单的某些部分。
echo $form->field($modelAccMain, 'account_type')
       ->widget(Select2::classname(), [
        'data' => $accountTypeArray,
        'options' => ['placeholder' => 'Select account type',"id"=>"mypreffereid"],
        ]);