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