如何在yii2中创建一个下拉列表?

时间:2014-02-05 05:07:06

标签: php drop-down-menu yii2

如何使用dropdown和模型在yii2中制作activeform?由于yii2中的所有方法都已更改,如何在新的方法中完成?

11 个答案:

答案 0 :(得分:116)

就像

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

答案 1 :(得分:87)

似乎你已经找到了你的答案,但是既然你提到了活动形式,我将再贡献一个,即使它只是微不足道。

<?php
    $form = ActiveForm::begin();

    echo $form->field($model, 'attribute')
        ->dropDownList(
            $items,           // Flat array ('id'=>'label')
            ['prompt'=>'']    // options
        );

    ActiveForm::end();
?>

答案 2 :(得分:53)

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

@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

答案 3 :(得分:15)

看看这个:

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-']) ?>

答案 4 :(得分:10)

也许我错了,但我认为来自视图的SQL查询是个坏主意

这是我的方式

在控制器中

<widget id="com.example.app" version="1.1.0" android-versionCode="2" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

在视图中

$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');


return $this->render('view',['model'=>$model, 'items'=>$items])

或使用ActiveForm

<?= Html::activeDropDownList($model, 'item_id',$items) ?>

答案 5 :(得分:8)

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

这将有助于您...不要忘记在标题中使用类文件。

答案 6 :(得分:5)

ActiveForm中使用:

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

答案 7 :(得分:5)

这是关于生成数据,因此从模型更适当地完成。想象一下,如果你想改变数据在下拉框中的显示方式,比如添加姓氏或其他东西。您必须找到每个下拉框并更改arrayHelper。我在模型中使用一个函数来返回下拉列表的数据,因此我不必在视图中重复代码。它还有一个优点,我可以在这里指定过滤器,并将它们应用于从该模型创建的每个下拉列表;

/* Model Standard.php */

public function getDropdown(){
      return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}

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

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

答案 8 :(得分:1)

如果你把它放到了列表的底部。保存一些PHP代码,然后根据需要将所有内容从数据库中取回:

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

答案 9 :(得分:0)

html :: activeDropDownList($ model,'id',ArrayHelper :: map(AttendanceLabel :: find()-> all(),'id','label_name'),['prompt'=>'出勤状态']);

答案 10 :(得分:-3)

以下也可以完成。如果要添加前置图标。这将有所帮助。

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