Comment faire un dropdown
en yii2
utilisant un activeform
et un modèle? Puisque toutes les méthodes ont changé yii2
, comment cela se passe-t-il dans la nouvelle?
Comment faire un dropdown
en yii2
utilisant un activeform
et un modèle? Puisque toutes les méthodes ont changé yii2
, comment cela se passe-t-il dans la nouvelle?
Réponses:
C'est comme
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
ArrayHelper dans Yii2 remplace les données de la liste CHtml dans Yii 1.1. [Veuillez charger les données du tableau à partir de votre contrôleur]
ÉDITER
Chargez les données de votre contrôleur.
Manette
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
En vue
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Il semble que vous ayez déjà trouvé votre réponse, mais puisque vous avez mentionné le formulaire actif, je contribuerai avec un autre, même s'il ne diffère que légèrement.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
événement dans jquery pour remplir le deuxième champ en fonction de la sélection du premier.
Il y a quelques bonnes solutions ci-dessus, et la mienne est juste une combinaison de deux (je suis venu ici à la recherche d'une solution).
La solution de @Sarvar Nishonboyev est bonne car elle maintient la création de l'étiquette d'entrée du formulaire et du bloc d'aide pour les messages d'erreur.
J'y suis allé avec:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
Encore une fois, merci à: @Sarvar Nishonboyev et @ippi
Il semble qu'il y ait beaucoup de bonnes réponses à cette question.Je vais donc essayer de donner une réponse détaillée
forme active et données codées en dur
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
ou
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
formulaire actif et données d'une table de base de données
nous allons utiliser ArrayHelper alors ajoutez-le d'abord à l'espace de nom en
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper a de nombreuses fonctions complètes d'utilisation qui pourraient être utilisées pour traiter des tableaux map () est celui que nous allons utiliser ici cette fonction aide à créer une carte (de paires clé-valeur) à partir d'un tableau multidimensionnel ou d'un tableau d'objets.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
ne fait pas partie d'un formulaire actif
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
ou
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
pas un formulaire actif mais des données d'une table de base de données
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Regardez ceci:
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-']) ?>
Peut-être que je me trompe, mais je pense que la requête SQL de vue est une mauvaise idée
C'est mon chemin
Dans le contrôleur
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
Et en vue
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Ou en utilisant ActiveForm
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
et dans ma page d'affichage<?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']
) ?>
Cela vous aidera ... N'oubliez pas d'utiliser le fichier de classe dans l'en-tête.
use yii\helpers\ArrayHelper;
pour pouvoir utiliser l'assistant.
En ActiveForm
utilisation juste:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Il s'agit de générer des données, et c'est donc plus correctement fait à partir du modèle. Imaginez si vous vouliez changer la façon dont les données sont affichées dans la liste déroulante, par exemple ajouter un nom de famille ou quelque chose. Vous devrez trouver chaque liste déroulante et modifier le fichier arrayHelper
. J'utilise une fonction dans mes modèles pour renvoyer les données d'une liste déroulante, donc je n'ai pas à répéter le code dans les vues. Cela a également l'avantage de pouvoir spécifier un filtre ici et de les appliquer à chaque liste déroulante créée à partir de ce modèle;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Vous pouvez utiliser ceci dans votre fichier de vue comme ceci;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Si vous avez atteint le bas de la liste. Enregistrez du code php et ramenez tout simplement de la base de données selon vos besoins, comme ceci:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Attendance Status']) ;
Le suivi peut également être fait. Si vous souhaitez ajouter l'icône de préfixe. Ce sera 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();?>