Nasıl bir hale getirmek için dropdown
de yii2
bir kullanma activeform
ve bir model? Tüm yöntemler değiştiğine göre yii2
, yenisinde nasıl yapılıyor?
Nasıl bir hale getirmek için dropdown
de yii2
bir kullanma activeform
ve bir model? Tüm yöntemler değiştiğine göre yii2
, yenisinde nasıl yapılıyor?
Yanıtlar:
Gibi
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
Yii2'deki ArrayHelper, Yii 1.1'deki CHtml liste verilerinin yerini alır. [Lütfen denetleyicinizden dizi verilerini yükleyin]
DÜZENLE
Denetleyicinizden veri yükleyin.
Kontrolör
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Görünümünde
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Görünüşe göre cevabınızı zaten buldunuz, ancak aktif formdan bahsettiğiniz için, çok az farklılık gösterse bile, bir tane daha katkıda bulunacağım.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
olayı birinci seçimine göre ikinci alanı doldurmak için değiştirmek olacaktır .
Yukarıda bazı iyi çözümler var ve benimki sadece ikisinin bir kombinasyonu (buraya bir çözüm aramaya geldim).
@Sarvar Nishonboyev'in çözümü iyidir çünkü hata mesajları için form giriş etiketinin ve yardım bloğunun oluşturulmasını sağlar.
İle gittim:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
Yine, tam kredi: @Sarvar Nishonboyev ve @ippi
Görünüşe göre bu soruya birçok güzel cevap var, bu yüzden detaylı bir cevap vermeye çalışacağım.
etkin form ve kodlanmış veriler
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
veya
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
aktif form ve bir db tablosundaki veriler
ArrayHelper'ı kullanacağız, bu yüzden önce onu isim alanına ekleyin.
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper, dizileri işlemek için kullanılabilecek tam işlevlere sahiptir () burada kullanacağımız işlevdir, bu işlev çok boyutlu bir diziden veya bir dizi nesneden bir eşleme (anahtar-değer çiftleri) yapmaya yardımcı olur.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
aktif bir formun parçası değil
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
veya
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
etkin bir form değil, bir db tablosundaki veriler
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Şuna bir bak:
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-']) ?>
Belki yanılıyorum ama SQL sorgusunun kötü bir fikir olduğunu düşünüyorum
Bu benim yolum
Denetleyicide
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
Ve Görünümde
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Veya ActiveForm kullanarak
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
ve görünüm <?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']
) ?>
Bu size yardımcı olacaktır ... Başlıktaki sınıf dosyasını kullanmayı unutmayın.
use yii\helpers\ArrayHelper;
, yardımcıyı kullanabilmek için yazmak gerekir.
In ActiveForm
Kullanımdan hemen:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Bu, veri üretmekle ilgilidir ve bu nedenle modelden daha doğru bir şekilde yapılır. Verilerin açılır kutuda görüntülenme şeklini değiştirmek isteyip istemediğinizi hayal edin, bir soyadı veya başka bir şey ekleyin. Her açılır kutuyu bulmanız ve arrayHelper
. Bir açılır listeye ilişkin verileri döndürmek için modellerimde bir işlev kullanıyorum, bu nedenle görünümlerde kodu tekrarlamak zorunda kalmam. Ayrıca burada filtre belirtebilme ve bu modelden oluşturulan her açılır menü için uygulanmasını sağlama avantajına sahiptir;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Bunu görünüm dosyanızda şu şekilde kullanabilirsiniz;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Listenin sonuna geldiyseniz. Biraz php kodu kaydedin ve ihtiyacınız olan her şeyi DB'den geri getirin:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['istem' => 'Katılım Durumu']) ;
Aşağıdakiler de yapılabilir. Başa eklenen simgesi eklemek istiyorsanız. Bu yardımcı olacaktır.
<?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();?>