Interesante widget para el auto completado de formularios a medida que vas avanzando en las opciones de forma dinámica el resto se va acomodando :).

Widget :

DEMO:

Instalación vía composer:

php composer.phar require kartik-v/yii2-widget-depdrop "@dev"

Formulario:

namespace app\models;
use kartik\depdrop\DepDrop;
use yii\helpers\ArrayHelper;

//----

echo $form->field($model, 'id_clase')->dropDownList(ArrayHelper::map(Dashboard::find()->all(), 'id', 'nombre'), ['id'=>'id']);

// Child # 1

echo $form->field($model, 'atributo')->widget(DepDrop::classname(), [
  'options'=>['id'=>'subcat-atributo'],
  //'options'=>ArrayHelper::map(ClassAtributo::find()->where(['id_clase'=>'1'])->all(), 'id', 'nombre'),
  'pluginOptions'=>[
      'depends'=>['id'],
      'placeholder'=>'Select...',
      'url'=>Url::to(['subcat'])
  ]
]);

Ahora editamos el controlador de la vista:

    // THE CONTROLLER
    public function actionSubcat() {
        $out = [];
        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $cat_id = $parents[0];
                $out=ViewAdvance::getAtributo($cat_id);
                echo json_encode(['output'=>$out, 'selected'=>'']);
                return;
            }
        }
        echo json_encode(['output'=>'', 'selected'=>'']);
    }

La función se llama subcat, ya que estoy siguiendo el ejemplo de la documentación oficial del widget con algunas “mejoras” xD.

Ahora vamos al modelo relacionado con el controlador, para crear la función  “getAtributo”, la cual realizara la consulta en la base de datos considerando el valor del campo ya ingresado en el formulario :).

    public function getAtributo($id){
      $data = ClassAtributo::find()->where(['id_clase'=>$id])->select(['id', 'nombre AS name'])->asArray()->all();
      return $data;
    }

listo 🙂

1