如何在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中的ArrayHelperreplaceYii 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) ?> 

看来你已经find了你的答案,但是既然你提到了积极的forms,我会再贡献一个,即使它只是略有不同。

 <?php $form = ActiveForm::begin(); echo $form->field($model, 'attribute') ->dropDownList( $items, // Flat array ('id'=>'label') ['prompt'=>''] // options ); ActiveForm::end(); ?> 

上面有一些很好的解决scheme,我只是两个组合(我来这里寻找解决scheme)。

@Sarvar Nishonboyev的解决scheme是很好的,因为它维护了错误消息的表单input标签和帮助块的创build。

我跟着去了

 <?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()是我们将要使用的函数,这个函数可以帮助我们从multidimensional array或对象数组中创build一个映射(关键值对)。

 <?php echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?> 

不是活动forms的一部分

 <?php echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ; ?> 

要么

 <?php $a= ['1' => 'Yes', '0' => 'No']; echo Html::activeDropDownList($model, 'filed_name',$a) ; ?> 

不是活动的forms,而是来自数据库表的数据

 <?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(); ?> 
 <?= $form->field($model, 'attribute_name')->dropDownList( ArrayHelper::map(Table_name::find()->all(),'id','field_name'), ['prompt' => 'Select'] ) ?> 

这将帮助你…不要忘记在标题中使用类文件。

ActiveForm使用:

 <?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?> 

这是关于生成数据,所以更好地从模型中完成。 想象一下,如果你想改变数据显示在下拉框中的方式,比如添加一个姓氏或其他东西。 您必须find每个下拉框并更改arrayHelper 。 我在模型中使用了一个函数来返回下拉数据,所以我不必在视图中重复代码。 它还具有这样的优点:我可以在这里指定filter并使它们适用于从此模型创build的每个下拉菜单;

 /* Model Standard.php */ public function getDropdown(){ return ArrayHelper::map(self::find()->all(), 's_id', 'name')); } 

你可以像这样在你的视图文件中使用它;

 echo $form->field($model, 'attribute') ->dropDownList( $model->dropDown ); 

如果你把它放在列表的底部。 保存一些PHP代码,只需从数据库中取出所有内容,如下所示:

  $items = Standard::find()->select(['name'])->indexBy('s_id')->column(); 

以下也可以做到。 如果你想附加prepend图标。 这将是有益的。

 <?php $form = ActiveForm::begin(); echo $form->field($model, 'field')->begin(); echo Html::activeLabel($model, 'field', ["class"=>"control-label col-md-4"]); ?> <div class="col-md-5"> <?php echo Html::activeDropDownList($model, 'field', $array_list, ['class'=>'form-control']); ?> <p><i><small>Please select field</small></i>.</p> <?php echo Html::error($model, 'field', ['class'=>'help-block']); ?> </div> <?php echo $form->field($model, 'field')->end(); ActiveForm::end();?>