Вы должны предоставить пары name=>value
для id
и text
, которые будут назначены для одной опции, если вы посмотрите на DOCS
вы увидите, что вам нужно вернуть массив, как показано ниже
[
'out'=>[
['id'=>'<city-id>', 'name'=>'<city-name>'],
['id'=>'<city-id>', 'name'=>'<city-name>']
],
'selected'=>'<city-id>'
]
, что означает, что идентификатор будет предоставлен с индексом id
, а текст для выпадающего списка будет снабжен индексом name
и, глядя на ответ, предоставленный вами, ваш метод getAllCities
возвращает массив, как показано ниже:
[
'id'=>'name',
'id'=>'name',
]
вы не добавили метод City::getAllCities($region_id);
, который возвращает массив $out
, но вочень базовый уровень согласно документации, он должен выглядеть следующим образом:
Примечание. Измените имена table
и column
соответственно, я полагаю, у вас есть столбцы id
и name
длягорода, если у вас есть любое другое имя столбца для названия города, например city_name
, вы должны создать псевдоним name
для поля city_name
в запросе.
public function getAllCities($region_id){
$query = new \yii\db\Query;
$query->select('id, name')
->from('{{%city}}')
->where(['=', 'region_id', $region_id])
->limit(20);
$command = $query->createCommand();
return $command->queryAll();
}
Это будетвернуть массив, как показано ниже.
Array
(
[0] => Array
(
[id] => 40
[name] => Велико Търново
)
[1] => Array
(
[id] => 41
[name] => Горна Оряховица
)
[2] => Array
(
[id] => 42
[name] => Елена
)
[3] => Array
(
[id] => 43
[name] => Златарица
)
)
, который будетЯ буду закодирован как JSON, как показано ниже
[
{
"id": "40",
"name": "Велико Търново"
},
{
"id": "41",
"name": "Горна Оряховица"
},
{
"id": "42",
"name": "Елена"
},
{
"id": "43",
"name": "Златарица"
}
]
, и, в конечном итоге, при кодировании строкой
echo Json::encode(['output'=>$out, 'selected'=>'']);
вернется
{
"output": [
{
"id": "40",
"name": "Велико Търново"
},
{
"id": "41",
"name": "Горна Оряховица"
},
{
"id": "42",
"name": "Елена"
},
{
"id": "43",
"name": "Златарица"
}
],
"selected": ""
}
Надеюсь, это поможет.