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

时间:2015-07-10 11:34:02

标签: php yii2 yii2-advanced-app

我有一个使用YII2 ActiveForm生成的表单。如果我选择某些选项,我需要有一些字段,或者如果我选择其他选项需要删除它们。

例如我有一个下拉帐户类型,有两个选项“个人”和“公司”。 如果用户选择“个人”,表单上的某些字段需要说明公司名称,并且需要显示其他一些字段,如名字,姓氏。最初显示表单时,只有“帐户类型”字段。

下面是我目前的代码

<?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(); ?> 

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用scenarios,首先在模型中定义它们,然后在视图中使用if语句

if ($model->isAttributeActive('attribute_name')) {

但是像@nterms写道,如果你希望用户能够在客户端开启,那么javascript会更好。

定义方案也有助于验证(仅验证活动属性)。

P.S。不要忘记在控制器中设置场景

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

答案 1 :(得分:1)

我处理它的方式是使用jquery hide和show使用下拉列表的更改事件,

在你的javascript中

假设select 2小部件中的数据采用数组的形式 例如:

[1=>"first-item",2=>"second-item",...]

$(document).ready(function(){
var id= //check the id of the select2

使用chrome;检查元素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"],
        ]);