どのように作るためdropdown
にyii2
使用activeform
してモデルを?ですべての方法が変更されたのでyii2
、新しい方法ではどのように行われますか?
どのように作るためdropdown
にyii2
使用activeform
してモデルを?ですべての方法が変更されたのでyii2
、新しい方法ではどのように行われますか?
回答:
のような
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
Yii2のArrayHelperは、Yii1.1のCHtmlリストデータを置き換えます。[コントローラーから配列データをロードしてください]
編集
コントローラからデータをロードします。
コントローラ
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
ビューで
<?= Html::activeDropDownList($model, 's_id',$items) ?>
あなたはすでにあなたの答えを見つけたようですが、あなたがアクティブなフォームについて言及したので、それがほんの少しだけ異なっていても、私はもう1つ貢献します。
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
、jqueryでイベントを操作して、最初の選択に基づいて2番目のフィールドにデータを入力することだと思います。
上記のいくつかの良い解決策があります、そして私のものはちょうど2つの組み合わせです(私は解決策を探してここに来ました)。
@Sarvar Nishonboyevのソリューションは、フォーム入力ラベルとエラーメッセージのヘルプブロックの作成を維持するため、優れています。
私は一緒に行きました:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
繰り返しになりますが、完全なクレジット:@ SarvarNishonboyev'sと@ippi
この質問には良い答えがたくさんあるようですので、詳細な答えを出そうと思います
アクティブなフォームとハードコードされたデータ
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
または
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
データベーステーブルからのアクティブなフォームとデータ
ArrayHelperを使用するので、最初にそれを名前空間に追加します。
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelperには、配列の処理に使用できる完全な関数が多数あります。map()は、ここで使用する関数で、多次元配列またはオブジェクトの配列から(キーと値のペアの)マップを作成するのに役立ちます。
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
アクティブなフォームの一部ではありません
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
または
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
アクティブなフォームではなく、dbテーブルのデータ
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
これを見てください:
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-']) ?>
たぶん私は間違っていますが、ビューからのSQLクエリは悪い考えだと思います
これが私のやり方です
コントローラー内
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
そしてビューで
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
またはActiveFormを使用する
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
して、コントローラーとビューページにコードを追加しました<?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]);?>
これはデータの生成に関するものであるため、モデルからより適切に実行されます。ドロップダウンボックスでのデータの表示方法を変更したい場合を想像してみてください。たとえば、姓などを追加します。すべてのドロップダウンボックスを見つけて、を変更する必要がありarrayHelper
ます。モデルで関数を使用してドロップダウンのデータを返すので、ビューでコードを繰り返す必要はありません。ここでフィルターを指定して、このモデルから作成されたすべてのドロップダウンに適用できるという利点もあります。
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
これは、次のようにビューファイルで使用できます。
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
リストの一番下に到達した場合。いくつかのphpコードを保存し、次のように必要に応じてDBからすべてを戻します。
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList($ model、 'id'、ArrayHelper :: map(AttendanceLabel :: find()-> all()、 'id'、 'label_name')、['prompt' => 'Attendance Status']) ;
以下も可能です。追加アイコンを追加したい場合。これは役に立ちます。
<?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();?>