【问题标题】:Removing a field from a form generated by YII2 ActiveForm从 YII2 ActiveForm 生成的表单中删除字段
【发布时间】:2016-12-10 22:35:38
【问题描述】:

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

例如我有一个下拉 AccountType,有两个选项“个人”和“公司”。 如果用户选择“个人”,表单上的某些字段需要离开说公司名称,而其他一些字段需要出现,例如名字,姓氏。最初显示表单时,只有 Account Type 字段。

下面是我目前的代码

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

非常感谢任何帮助。

【问题讨论】:

  • 要在服务器中执行此操作,您需要在每次用户更改“AccountType”字段的值时提交表单。这有点令人恼火。我建议为此使用 JS。您可以编写一些代码来根据所选值显示/隐藏表单的某些部分。

标签: php yii2 yii2-advanced-app


【解决方案1】:

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

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

但就像@nterms 写的那样,如果您希望用户能够在客户端切换,javascript 会更好。

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

附言不要忘记在控制器中设置场景

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

【讨论】:

    【解决方案2】:

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

    在你的 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"],
            ]); 
    

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多