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?
php
drop-down-menu
yii2
Dency GB
la source
la source
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) ?>
la source
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(); ?>
la source
.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
la source
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']); ?>
la source
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-']) ?>
la source
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(); ?>
la source
$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.
la source
use yii\helpers\ArrayHelper;
pour pouvoir utiliser l'assistant.En
ActiveForm
utilisation juste:<?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?>
la source
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 );
la source
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();
la source
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Attendance Status']) ;
la source
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();?>
la source