Full Stack LAMP - MEAN Developer, Python developer. Certified Azure Developer. Freelance programmer/consultant/trainer.

How to make a drop down list in yii2?

In this tutorial, I would like to show you making the dropdown list in yii2 using different data sources like static array data and database table modal data.

First I would like to share basic syntax – here you go…

Yii2 DropDownList syntax – active field style

echo $form->field($model, 'name_field')->dropDownList(
        [items],
        [options]
    );

Yii2 DropDownList syntax – active form style

echo Html::field($model, 'name_field')->dropDownList(
        [items],
        [options]
    );

Both style are almost same , but active field style is good because it maintains the creation of the form input label and help-block for error messages where active form style generate only dropdown.

DropDownList with array data

field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>

DropDownList with model data

Using below code snippet you can display the database table column’s data in the dropdownList via modal.

all();
 
// default selected country , here 10 is country id
$countries->country_id = 10;
 
// convert $country modal result to array format using ArrayHelper's map() method. 
$countryList=ArrayHelper::map($countries,'country_id','name');
 
// this will generate dropdownList with given array of data.
echo $form->field($model, 'name')->dropDownList($countryList,['prompt'=>'Please select country']);
 
?>

Here we used use yii\helpers\ArrayHelper. ArrayHelper has many use full functions which could be used to process arrays. map() is the one, we are going to use here this function which will help to make a map ( of key-value pairs) from a multidimensional array or an array of objects.

Generating dropdownlist with option groups.

Below is the simple example on creating dropdownList with option groups

$countries = array(
        'Asia'=>array(
            'russia'=>'Russia',
            'india'=>'India',
        ),
        'Africa'=>array(
            'kenya'=>'Kenya',
            'zimbabwe'=>'Zimbabwe',
        ),
    )
 
echo $form->field($model, 'country_id')->dropDownList($countries);
  1. $customer_persons_data = (new yiidbQuery())
    ->select([‘customer_person_id as id’, “CONCAT(name, ‘ (‘,email,’)’) as name”])
    ->from(‘table’)
    ->where([‘customer_person_id’ => $customer_persons_ids])
    ->all();

Leave a Reply