How to make a drop down list in yii2?

前端 未结 12 1997
天命终不由人
天命终不由人 2020-12-04 13:07

How to make a dropdown in yii2 using an activeform and a model? Since all the methods has changed in yii2,how it is done

相关标签:
12条回答
  • 2020-12-04 13:48

    There are some good solutions above, and mine is just a combination of two (I came here looking for a solution).

    @Sarvar Nishonboyev's solution is good because it maintains the creation of the form input label and help-block for error messages.

    I went with:

    <?php
    use yii\helpers\ArrayHelper;
    use app\models\Product;
    ?>
    <?=
    $form->field($model, 'parent_id')
         ->dropDownList(
                ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
                )
    ?>
    

    Again, full credit to: @Sarvar Nishonboyev's and @ippi

    0 讨论(0)
  • 2020-12-04 13:48

    If you made it to the bottom of the list. Save some php code and just bring everything back from the DB as you need like this:

     $items = Standard::find()->select(['name'])->indexBy('s_id')->column();
    
    0 讨论(0)
  • 2020-12-04 13:55

    Maybe I'm wrong but I think that SQL query from view is a bad idea

    This is my way

    In controller

    $model = new SomeModel();
    $items=ArrayHelper::map(TableName::find()->all(),'id','name');
    
    
    return $this->render('view',['model'=>$model, 'items'=>$items])
    

    And in View

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

    Or using ActiveForm

    <?php $form = ActiveForm::begin(); ?>
     <?= $form->field($model, 'item_id')->dropDownList($items) ?>
    <?php ActiveForm::end(); ?>
    
    0 讨论(0)
  • 2020-12-04 13:56

    It seems you've found your answer already but since you mentioned the active form I'll contribute with one more, even if it differs only ever so slightly.

    <?php
        $form = ActiveForm::begin();
    
        echo $form->field($model, 'attribute')
            ->dropDownList(
                $items,           // Flat array ('id'=>'label')
                ['prompt'=>'']    // options
            );
    
        ActiveForm::end();
    ?>
    
    0 讨论(0)
  • 2020-12-04 13:56

    Have a look this:

    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-']) ?>
    
    0 讨论(0)
  • 2020-12-04 13:58

    This is about generating data, and so is more properly done from the model. Imagine if you ever wanted to change the way data is displayed in the drop-down box, say add a surname or something. You'd have to find every drop-down box and change the arrayHelper. I use a function in my models to return the data for a dropdown, so I don't have to repeat code in views. It also has the advantage that I can specify filter here and have them apply to every dropdown created from this model;

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

    You can use this in your view file like this;

    echo $form->field($model, 'attribute')
            ->dropDownList(
                $model->dropDown
            );
    
    0 讨论(0)
提交回复
热议问题