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?
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?
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) ?>
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();
?>
.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
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']);
?>
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-']) ?>
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(); ?>
$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.
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')
?>
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
);
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();
Html :: activeDropDownList ($ modelo, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Estado de asistencia']) ;
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();?>