ejemplo dropdownlist dependent combo arrayhelper activeform php drop-down-menu yii2

php - dropdownlist - ¿Cómo hacer una lista desplegable en yii2?



yii2 dropdownlist dependent (11)

¿Cómo hacer un dropdown en yii2 usando una forma activeform y un modelo? Como todos los métodos han cambiado en yii2 , ¿cómo se hace en el nuevo?


Echa un vistazo a esto:

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-'']) ?>


En ActiveForm simplemente use:

<?= $form->field($model, ''state_id'') ->dropDownList([''prompt'' => ''---- Select State ----'']) ->label(''State'') ?>


Es como

<?php use yii/helpers/ArrayHelper; use backend/models/Standard; ?> <?= Html::activeDropDownList($model, ''s_id'', ArrayHelper::map(Standard::find()->all(), ''s_id'', ''name'')) ?>

ArrayHelper en Yii2 reemplaza los datos de la lista CHtml en Yii 1.1. [Cargue los datos de la matriz desde su controlador]

EDITAR

Cargue datos de su controlador.

Controlador

$items = ArrayHelper::map(Standard::find()->all(), ''s_id'', ''name''); ... return $this->render(''your_view'',[''model''=>$model, ''items''=>$items]);

En vista

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


Hay algunas buenas soluciones arriba, y la mía es solo una combinación de dos (vine aquí buscando una solución).

La solución de @Sarvar Nishonboyev es buena porque mantiene la creación de la etiqueta de entrada del formulario y bloque de ayuda para los mensajes de error.

Yo fui con:

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

Nuevamente, crédito completo a: @Sarvar Nishonboyev y @ippi


Parece que hay muchas buenas respuestas para esta pregunta. Por lo tanto, trataré de dar una respuesta detallada

forma activa y datos codificados

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

o

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

forma activa y datos de una tabla db

vamos a usar ArrayHelper así que primero agréguelo al espacio de nombres

<?php use yii/helpers/ArrayHelper; ?>

ArrayHelper tiene muchas funciones completas que se pueden usar para procesar arrays. Map () es el que vamos a usar aquí. Esta función ayuda a hacer un mapa (de pares clave-valor) de una matriz multidimensional o una matriz de objetos.

<?php echo $form->field($model, ''name'')->dropDownList(ArrayHelper::map(User::find()->all(),''id'',''username''),[''prompt''=>''Select User'']); ?>

no es parte de una forma activa

<?php echo Html::activeDropDownList($model, ''filed_name'',[''1'' => ''Yes'', ''0'' => ''No'']) ; ?>

o

<?php $a= [''1'' => ''Yes'', ''0'' => ''No'']; echo Html::activeDropDownList($model, ''filed_name'',$a) ; ?>

no es una forma activa sino datos de una tabla db

<?php echo Html::activeDropDownList($model, ''filed_name'',ArrayHelper::map(User::find()->all(),''id'',''username''),[''prompt''=>''Select User'']); ?>


Parece que ya has encontrado tu respuesta, pero como mencionaste el formulario activo, contribuiré con uno más, aunque solo difiera un poco.

<?php $form = ActiveForm::begin(); echo $form->field($model, ''attribute'') ->dropDownList( $items, // Flat array (''id''=>''label'') [''prompt''=>''''] // options ); ActiveForm::end(); ?>


Se trata de generar datos y, por lo tanto, se hace más correctamente desde el modelo. Imagine si alguna vez quiso cambiar la forma en que se muestran los datos en el cuadro desplegable, por ejemplo, agregar un apellido o algo. Tendría que encontrar todos los arrayHelper desplegables y cambiar el arrayHelper . Utilizo una función en mis modelos para devolver los datos para un menú desplegable, por lo que no tengo que repetir el código en las vistas. También tiene la ventaja de que puedo especificar el filtro aquí y hacer que se apliquen a cada menú desplegable creado a partir de este modelo;

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

Puedes usar esto en tu archivo de vista así;

echo $form->field($model, ''attribute'') ->dropDownList( $model->dropDown );


Si llegó al final de la lista. Guarde algunos códigos php y simplemente devuelva todo lo que necesita de la base de datos:

$items = Standard::find()->select([''name''])->indexBy(''s_id'')->column();


Tal vez estoy equivocado, pero creo que la consulta SQL de la vista es una mala idea

Esta es mi manera

En el controlador

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

Y a la vista

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

O usando ActiveForm

<?php $form = ActiveForm::begin(); ?> <?= $form->field($model, ''item_id'')->dropDownList($items) ?> <?php ActiveForm::end(); ?>


Lo siguiente también se puede hacer. Si quieres agregar un icono de anteponer. Esto será útil.

<?php $form = ActiveForm::begin(); echo $form->field($model, ''field'')->begin(); echo Html::activeLabel($model, ''field'', ["class"=>"control-label col-md-4"]); ?> <div class="col-md-5"> <?php echo Html::activeDropDownList($model, ''field'', $array_list, [''class''=>''form-control'']); ?> <p><i><small>Please select field</small></i>.</p> <?php echo Html::error($model, ''field'', [''class''=>''help-block'']); ?> </div> <?php echo $form->field($model, ''field'')->end(); ActiveForm::end();?>


<?= $form->field($model, ''attribute_name'')->dropDownList( ArrayHelper::map(Table_name::find()->all(),''id'',''field_name''), [''prompt'' => ''Select''] ) ?>

Esto te ayudará ... No te olvides de usar el archivo de clase en el encabezado.