Jak wykonać dropdown
in yii2
przy użyciu activeform
modelu i? Skoro wszystkie metody się zmieniły yii2
, jak to się robi w nowej?
Jak wykonać dropdown
in yii2
przy użyciu activeform
modelu i? Skoro wszystkie metody się zmieniły yii2
, jak to się robi w nowej?
Odpowiedzi:
To jest jak
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
ArrayHelper w Yii2 zastępuje dane listy CHtml w Yii 1.1. [Proszę załadować dane tablicy z kontrolera]
EDYTOWAĆ
Załaduj dane ze swojego kontrolera.
Kontroler
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Z uwagi
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Wygląda na to, że już znalazłeś odpowiedź, ale skoro wspomniałeś o aktywnej formie, dodam jeszcze jedną, nawet jeśli różni się ona tylko nieznacznie.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
zdarzeniem w jquery w celu wypełnienia drugiego pola na podstawie wyboru pierwszego.
Powyżej jest kilka dobrych rozwiązań, a moje to tylko połączenie dwóch (przyszedłem tutaj, szukając rozwiązania).
Rozwiązanie @Sarvar Nishonboyev jest dobre, ponieważ utrzymuje tworzenie etykiety danych wejściowych formularza i bloku pomocy dla komunikatów o błędach.
Poszedłem z:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
Ponownie, pełne uznanie dla: @Sarvar Nishonboyev's i @ippi
Wydaje się, że jest wiele dobrych odpowiedzi na to pytanie, więc postaram się udzielić szczegółowej odpowiedzi
aktywny formularz i zakodowane dane
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
lub
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
aktywny formularz i dane z tabeli db
będziemy używać ArrayHelper, więc najpierw dodaj go do przestrzeni nazw przez
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper ma wiele pełnych funkcji, które mogą być użyte do przetwarzania tablic. Map () jest tą, której użyjemy tutaj, ta funkcja pomaga utworzyć mapę (par klucz-wartość) z wielowymiarowej tablicy lub tablicy obiektów.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
nie jest częścią aktywnego formularza
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
lub
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
nie jest to aktywny formularz, ale dane z tabeli db
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Spójrz na to:
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-']) ?>
Może się mylę, ale myślę, że zapytanie SQL z widoku to zły pomysł
To jest mój sposób
W kontrolerze
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
I w widoku
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Lub za pomocą ActiveForm
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
i na mojej stronie widoku<?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']
) ?>
To ci pomoże ... Nie zapomnij użyć pliku klasy w nagłówku.
use yii\helpers\ArrayHelper;
aby móc korzystać z pomocnika.
W ActiveForm
wystarczy użyć:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Chodzi o generowanie danych, a więc jest to lepiej zrobione z modelu. Wyobraź sobie, że kiedykolwiek chciałbyś zmienić sposób wyświetlania danych w rozwijanym polu, powiedz, dodaj nazwisko lub coś w tym stylu. Musisz znaleźć każde rozwijane pole i zmienić arrayHelper
. Używam funkcji w moich modelach, aby zwrócić dane do listy rozwijanej, więc nie muszę powtarzać kodu w widokach. Ma również tę zaletę, że mogę tutaj określić filtr i zastosować je do każdego menu utworzonego z tego modelu;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Możesz użyć tego w swoim pliku widoku w ten sposób;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Jeśli dotarłeś do końca listy. Zapisz trochę kodu php i po prostu przywróć wszystko z DB, tak jak potrzebujesz:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Attendance Status']) ;
Można również wykonać następujące czynności. Jeśli chcesz dołączyć ikonę przedrostka. To będzie pomocne.
<?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();?>