Come fare un dropdown
in yii2
utilizzando un activeform
e un modello? Dal momento che tutti i metodi sono cambiati yii2
, come è fatto in quello nuovo?
Come fare un dropdown
in yii2
utilizzando un activeform
e un modello? Dal momento che tutti i metodi sono cambiati yii2
, come è fatto in quello nuovo?
Risposte:
È come
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
ArrayHelper in Yii2 sostituisce i dati dell'elenco CHtml in Yii 1.1. [Carica i dati dell'array dal controller]
MODIFICARE
Carica i dati dal tuo controller.
Controller
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
In vista
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Sembra che tu abbia già trovato la tua risposta ma visto che hai menzionato il modulo attivo ne contribuisco con uno in più, anche se differisce solo leggermente.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
evento in jquery per popolare il secondo campo in base alla selezione del primo.
Ci sono alcune buone soluzioni sopra, e la mia è solo una combinazione di due (sono venuto qui cercando una soluzione).
La soluzione di @Sarvar Nishonboyev è buona perché mantiene la creazione dell'etichetta di input del modulo e del blocco di aiuto per i messaggi di errore.
Sono andato 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')
)
?>
Ancora una volta, pieno merito a: @Sarvar Nishonboyev's e @ippi
Sembra che ci siano molte buone risposte per questa domanda. Quindi cercherò di dare una risposta dettagliata
forma attiva e dati codificati
<?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 attiva e dati da una tabella db
useremo ArrayHelper, quindi aggiungilo prima allo spazio dei nomi di
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper ha molte funzioni complete che potrebbero essere utilizzate per elaborare array map () è quello che useremo qui questa funzione aiuta a creare una mappa (di coppie chiave-valore) da un array multidimensionale o un array di oggetti.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
non fa parte di una forma attiva
<?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) ;
?>
non un modulo attivo ma dati da una tabella db
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Dai un'occhiata a questo:
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-']) ?>
Forse mi sbaglio ma penso che la query SQL dalla vista sia una cattiva idea
Questa è la mia strada
Nel controller
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
E in 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;
e nella mia pagina di visualizzazione<?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']
) ?>
Questo ti aiuterà ... Non dimenticare di usare il file di classe nell'intestazione.
use yii\helpers\ArrayHelper;
per poter utilizzare l'helper.
In ActiveForm
appena uso:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Si tratta di generare dati, quindi è più appropriato dal modello. Immagina se volessi cambiare il modo in cui i dati vengono visualizzati nella casella a discesa, ad esempio aggiungi un cognome o qualcosa del genere. Dovresti trovare ogni casella a discesa e modificare il file arrayHelper
. Uso una funzione nei miei modelli per restituire i dati per un menu a discesa, quindi non devo ripetere il codice nelle viste. Ha anche il vantaggio di poter specificare il filtro qui e di applicarlo a ogni elenco a discesa creato da questo modello;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Puoi usarlo nel tuo file di visualizzazione in questo modo;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Se sei arrivato in fondo alla lista. Salva un po 'di codice php e riporta tutto dal DB di cui hai bisogno in questo modo:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Attendance Status']) ;
Può anche essere fatto quanto segue. Se vuoi aggiungere anteponi icona. Questo sarà utile.
<?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();?>