Criei um dropDown para carregar dinamicamente só que não funciona.
Ao selecionar o estado, carregar as cidades no outro dropqDown.
Em meu _form.php:
<?php
$estados = Estado::find()->all();
$listaEstados=ArrayHelper::map($estados,'uf','nome');
?>
<?= $form->field($model, 'clifor_uf')->dropDownList($listaEstados, array('empty' => 'Selecione',
'ajax' => [
'type' => 'GET',
'url' => Yii::$app->urlManager->createUrl('cidade%2Flists'),
'success' => 'function(data){$("select#clientefornecedor-clifor_cidade").html(data);}',
'data' => ['uf' => 'js:$(this).val()']
]
));
?>
<?php
$cidades = Cidade::find()->all();
$listaCidade=ArrayHelper::map($cidades,'id','nome');
?>
<?= $form->field($model, 'clifor_cidade')->dropDownList($listaCidade,['prompt'=>'Selecione...']) ?>
Em meu arquivo list.php:
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model app\models\Cidade */
$this->title = $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Cidades', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="cidade-view">
<h1><?= Html::encode($this->title) ?></h1>
<p>
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
'class' => 'btn btn-danger',
'data' => [
'confirm' => 'Are you sure you want to delete this item?',
'method' => 'post',
],
]) ?>
</p>
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'nome',
'estado',
],
]) ?>
</div>
Em meu CidadeCotroller.php:
/**
* Lista de Cidades com filtro por UF BA
*/
public function actionLists($uf)
{
$countCidades = Cidade::find()
->innerJoin('`estado` ON `cidade`.`estado` = `estado`.`id`')
->where(['`estado`.`uf`' => $uf])
->count();
$cidades = Cidade::find()
->innerJoin('`estado` ON `cidade`.`estado` = `estado`.`id`')
->where(['`estado`.`uf`' => $uf])
->orderBy('nome')
->all();
if ($countCidades >0){
foreach($cidades as $cidade){
echo "<option value='".$cidade->id."'>".$cidade->nome."</option>";
}
} else {
echo "<option>-</option>";
}
}
O Select é gerado dessa forma:
<select id="clientefornecedor-clifor_uf" class="form-control" name="Clientefornecedor[clifor_uf]" empty="Selecione" ajax="{"type":"GET","url":"\/easymobile\/web\/index.php?r=cidade%252Flists","success":"function(data){$(\u0022select#clientefornecedor-clifor_cidade\u0022).html(data);}","data":{"uf":"js:$(this).val()"}}">