Comment créer une dropdown
dans yii2
en utilisant une activeform
et un modèle? Puisque toutes les méthodes ont changé dans yii2
, comment cela se fait-il dans la nouvelle?
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 liste CHtml dans Yii 1.1. [Veuillez charger les données de tableau à partir de votre contrôleur]
MODIFIER
Charger des données à partir 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é la forme active, je vais contribuer avec une autre, même si elle ne diffère que très légèrement.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['Prompt'=>''] // options
);
ActiveForm::end();
?>
Il existe quelques bonnes solutions ci-dessus, et la mienne est juste une combinaison de deux (je suis venu ici pour chercher une solution).
La solution de @Sarvar Nishonboyev est bonne car elle conserve la création du libellé d'entrée de 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, crédit complet à: @Sarvar Nishonboyev's et @ippi
Il semble y avoir beaucoup de bonnes réponses à cette question. Alors je vais essayer de donner une réponse détaillée
formulaire actif 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 noms en
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper a de nombreuses fonctions complètes qui pourraient être utilisées pour traiter des tableaux.
<?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 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(); ?>
<?= $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.
Il s’agit de générer des données, et est donc plus correctement réalisé à partir du modèle. Imaginez si vous avez toujours voulu modifier la façon dont les données sont affichées dans la liste déroulante, par exemple, ajoutez un nom de famille ou quelque chose du genre. Vous devez trouver chaque liste déroulante et changer le arrayHelper
. J'utilise une fonction dans mes modèles pour renvoyer les données pour une liste déroulante. Je n'ai donc pas à répéter le code dans les vues. Cela présente également l’avantage de pouvoir spécifier un filtre ici et de l’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
);
Dans ActiveForm
, utilisez simplement:
<?=
$form->field($model, 'state_id')
->dropDownList(['Prompt' => '---- Select State ----'])
->label('State')
?>
Si vous avez atteint le bas de la liste. Sauvegardez du code php et ramenez tout ce qui se trouve dans la base de données, comme vous le souhaitez:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();