如何使用
activeform
和模型在yii2
中制作一个dropdown
?由于所有方法在yii2
中都已更改,因此请告知新的方法。activeform
和模型在yii2
中制作一个dropdown
?由于所有方法在yii2
中都已更改,因此请告知新的方法。就像这样
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
在Yii2中,ArrayHelper替换了Yii 1.1中的CHtml列表数据。[请从您的控制器加载数组数据]
编辑
从您的控制器加载数据。
控制器
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
在视图中
<?= Html::activeDropDownList($model, 's_id',$items) ?>
看起来你已经找到了答案,但是因为你提到了主动语态,我会再做出一点贡献,即使它只有微小的差别。
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
事件,根据第一个选择的选项填充第二个字段。 - Arman P.上面有一些好的解决方案,我的解决方法只是两个方案的组合(我来这里是为了寻找解决方案)。
@Sarvar Nishonboyev的解决方案很好,因为它保留了表单输入标签和错误信息帮助块的创建。
我选择了:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
再次致谢:@Sarvar Nishonboyev和@ippi
看起来这个问题有很多好的答案,所以我会尝试给出一个详细的回答。
主动形式和硬编码数据
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
或者<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
活动表单和数据库表中的数据
我们将使用ArrayHelper,因此首先通过以下方式将其添加到名称空间中
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper有许多有用的函数,可以用来处理数组。 map()是我们要在这里使用的一个函数。 该函数用于从多维数组或对象数组中创建一个映射(键值对)。
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
不是活动表单的一部分
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
或者<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
不是一个活动表单,而是来自数据库表的数据
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
看看这个:
use yii\helpers\ArrayHelper; // load classes
use app\models\Course;
.....
$dataList=ArrayHelper::map(Course::find()->asArray()->all(), 'id', 'name');
<?=$form->field($model, 'center_id')->dropDownList($dataList,
['prompt'=>'-Choose a Course-']) ?>
也许我错了,但我认为从视图中进行SQL查询是一个不好的想法。
这是我的方式。
在控制器中。
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
同时在视图中
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
或者使用ActiveForm
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
,然后在我的视图页面中使用了:<?php echo $form->field($model, 'plan_type', ['options' => ['class' => ' input select']])->dropdownList( $this->params['items'],['prompt'=>'Select Plan','class' => 'selectpicker', 'data-live-search' => 'true','label'=>false]);?>
- RN Kushwaha<?= $form->field($model, 'attribute_name')->dropDownList(
ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
['prompt' => 'Select']
) ?>
这将有助于你...不要忘记在头部使用class文件。
use yii\helpers\ArrayHelper;
以便使用助手。 - Gogol本文涉及生成数据,因此最好从模型中进行。想象一下,如果您想要更改下拉框中显示数据的方式,比如添加一个姓氏之类的信息。您将不得不查找每个下拉框并更改arrayHelper
。我在我的模型中使用一个函数来返回下拉菜单的数据,这样我就不必在视图中重复代码。它还具有一个优点,即我可以在此处指定筛选器,并将其应用于从此模型创建的每个下拉菜单;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
ActiveForm
中,只需使用以下内容:<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();