Wie eine zu machen , dropdown
in yii2
eine mit activeform
und ein Modell? yii2
Wie wird es in der neuen Methode gemacht, da sich alle Methoden geändert haben ?
Wie eine zu machen , dropdown
in yii2
eine mit activeform
und ein Modell? yii2
Wie wird es in der neuen Methode gemacht, da sich alle Methoden geändert haben ?
Antworten:
Es ist wie
<?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 ersetzt die CHtml-Listendaten in Yii 1.1. [Bitte laden Sie Array-Daten von Ihrem Controller]
BEARBEITEN
Laden Sie Daten von Ihrem Controller.
Regler
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Im Hinblick auf
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Es scheint, dass Sie Ihre Antwort bereits gefunden haben, aber da Sie die aktive Form erwähnt haben, werde ich mit einer weiteren beitragen, auch wenn sie sich nur geringfügig unterscheidet.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
Auswahlfelds anzugeben und das Ereignis in jquery zu manipulieren, um das zweite Feld basierend auf der Auswahl des ersten zu füllen.
Es gibt oben einige gute Lösungen, und meine ist nur eine Kombination aus zwei (ich bin hierher gekommen, um nach einer Lösung zu suchen).
Die Lösung von @Sarvar Nishonboyev ist gut, da die Erstellung des Formulareingabeetiketts und des Hilfeblocks für Fehlermeldungen beibehalten wird.
Ich ging mit:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
Nochmals die volle Anerkennung an: @Sarvar Nishonboyev's und @ippi
Es scheint, dass es viele gute Antworten auf diese Frage gibt. Also werde ich versuchen, eine detaillierte Antwort zu geben
aktive Form und fest codierte Daten
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
oder
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
aktive Form und Daten aus einer DB-Tabelle
Wir werden ArrayHelper verwenden, also fügen Sie es zuerst dem Namensraum von hinzu
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper hat viele Vollfunktionen, die zur Verarbeitung von Arrays verwendet werden können. Map () ist diejenige, die wir hier verwenden werden. Diese Funktion hilft dabei, eine Map (aus Schlüssel-Wert-Paaren) aus einem mehrdimensionalen Array oder einem Array von Objekten zu erstellen.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
nicht Teil eines aktiven Formulars
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
oder
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
kein aktives Formular, sondern Daten aus einer DB-Tabelle
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Schauen Sie sich das an:
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-']) ?>
Vielleicht irre ich mich, aber ich denke, dass eine SQL-Abfrage aus der Sicht eine schlechte Idee ist
Das ist mein Weg
In der Steuerung
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
Und in Sicht
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Oder mit ActiveForm
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
und auf meiner Ansichtsseite<?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']
) ?>
Dies wird Ihnen helfen ... Vergessen Sie nicht, die Klassendatei im Header zu verwenden.
use yii\helpers\ArrayHelper;
werden, um den Helfer verwenden zu können.
In ActiveForm
nur verwenden:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Hier geht es darum, Daten zu generieren, und dies geschieht besser aus dem Modell heraus. Stellen Sie sich vor, Sie möchten jemals die Art und Weise ändern, in der Daten im Dropdown-Feld angezeigt werden, z. B. einen Nachnamen oder etwas hinzufügen. Sie müssten jedes Dropdown-Feld finden und das ändern arrayHelper
. Ich verwende eine Funktion in meinen Modellen, um die Daten für ein Dropdown-Menü zurückzugeben, sodass ich den Code in Ansichten nicht wiederholen muss. Es hat auch den Vorteil, dass ich hier Filter angeben und sie auf jedes Dropdown anwenden kann, das aus diesem Modell erstellt wurde.
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Sie können dies in Ihrer Ansichtsdatei wie folgt verwenden.
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Wenn Sie es bis zum Ende der Liste geschafft haben. Speichern Sie etwas PHP-Code und bringen Sie einfach alles aus der Datenbank zurück, wie Sie es brauchen:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Folgendes kann ebenfalls durchgeführt werden. Wenn Sie das Präfix-Symbol anhängen möchten. Dies wird hilfreich sein.
<?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();?>