Cómo hacer una dropdown
en yii2
el uso de una activeform
y un modelo? Dado que todos los métodos han cambiado yii2
, ¿cómo se hace en el nuevo?
php
drop-down-menu
yii2
Dency GB
fuente
fuente
Respuestas:
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) ?>
fuente
Parece que ya ha encontrado su respuesta, pero como mencionó el formulario activo, contribuiré con uno más, incluso si difiere solo ligeramente.
<?php $form = ActiveForm::begin(); echo $form->field($model, 'attribute') ->dropDownList( $items, // Flat array ('id'=>'label') ['prompt'=>''] // options ); ActiveForm::end(); ?>
fuente
.on('change')
evento en jquery para completar el segundo campo según la selección del primero.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 el bloque de ayuda para 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, todo el crédito para: @Sarvar Nishonboyev y @ippi
fuente
Parece que hay muchas buenas respuestas para esta pregunta, así que intentaré 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']); ?>
formulario activo y datos de una tabla de base de datos
vamos a usar ArrayHelper, así que primero agréguelo al espacio de nombres por
<?php use yii\helpers\ArrayHelper; ?>
ArrayHelper tiene muchas funciones completas de uso que podrían usarse para procesar matrices map () es la que vamos a usar aquí, esta función ayuda a hacer un mapa (de pares clave-valor) a partir 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 un formulario activo sino datos de una tabla db
<?php echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?>
fuente
Mira 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-']) ?>
fuente
Tal vez me equivoque, pero creo que la consulta SQL desde la vista es una mala idea
Esta es mi manera
En 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(); ?>
fuente
$this->view->params['items'] = $items;
y en mi página de vista<?php echo $form->field($model, 'plan_type', ['options' => ['class' => ' input select']])->dropdownList( $this->params['items'],['prompt'=>'Select Plan','class' => 'selectpicker', 'data-live-search' => 'true','label'=>false]);?>
<?= $form->field($model, 'attribute_name')->dropDownList( ArrayHelper::map(Table_name::find()->all(),'id','field_name'), ['prompt' => 'Select'] ) ?>
Esto te ayudará ... No olvides usar el archivo de clase en el encabezado.
fuente
use yii\helpers\ArrayHelper;
para poder usar el asistente.En
ActiveForm
el uso justo:<?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?>
fuente
Se trata de generar datos y, por lo tanto, se hace más correctamente a partir del modelo. Imagínese si alguna vez quisiera cambiar la forma en que se muestran los datos en el cuadro desplegable, por ejemplo, agregue un apellido o algo. Tendría que encontrar cada cuadro desplegable y cambiar el
arrayHelper
. Utilizo una función en mis modelos para devolver los datos de 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 filtros aquí y hacer que se apliquen a todos los menús desplegables creados a partir de este modelo;/* Model Standard.php */ public function getDropdown(){ return ArrayHelper::map(self::find()->all(), 's_id', 'name')); }
Puede usar esto en su archivo de vista de esta manera;
echo $form->field($model, 'attribute') ->dropDownList( $model->dropDown );
fuente
Si llegó al final de la lista. Guarde un poco de código php y simplemente recupere todo de la base de datos cuando lo necesite de esta manera:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
fuente
Html :: activeDropDownList ($ modelo, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Estado de asistencia']) ;
fuente
También se puede hacer lo siguiente. Si desea agregar el icono de anteposición. Esto será de gran ayuda.
<?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();?>
fuente