web-dev-qa-db-ja.com

yii2でドロップダウンリストを作成する方法

dropdownとモデルを使用してyii2activeformを作成する方法は? yii2ですべてのメソッドが変更されたため、新しいメソッドではどのように行われますか?

79
Dency G B

みたいです

<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>

<?= Html::activeDropDownList($model, 's_id',
      ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>

Yii2のArrayHelperは、Yii 1.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) ?>
116
Dency G B

あなたはすでにあなたの答えを見つけたようですが、あなたがアクティブなフォームについて言及したので、私はもう少し貢献します。

<?php
    $form = ActiveForm::begin();

    echo $form->field($model, 'attribute')
        ->dropDownList(
            $items,           // Flat array ('id'=>'label')
            ['Prompt'=>'']    // options
        );

    ActiveForm::end();
?>
87
ippi

上記にはいくつかの良い解決策がありますが、私のものは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')
            )
?>

繰り返しますが、完全なクレジット:@Sarvar Nishonboyev's and @ippi

54
johnsnails

この質問には多くの良い答えがあるようです。だから私は詳細な答えをしようとします

アクティブフォームとハードコードされたデータ

<?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']);
?>

dbテーブルのアクティブなフォームとデータ

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']);
?>
19
Midhun

これを見てください:

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-']) ?>
15

私は間違っているかもしれませんが、ビューからの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(); ?>
10
DespeiL
<?= $form->field($model, 'attribute_name')->dropDownList(
         ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
        ['Prompt' => 'Select']
) ?>

これはあなたを助けます...ヘッダーでクラスファイルを使用することを忘れないでください。

8
Kalai S

これはデータの生成に関するものであるため、モデルからより適切に行われます。ドロップダウンボックスでのデータの表示方法を変更したい場合は、姓などを追加するとします。すべてのドロップダウンボックスを見つけて、arrayHelperを変更する必要があります。モデルで関数を使用してドロップダウンのデータを返すため、ビューでコードを繰り返す必要はありません。また、ここでフィルターを指定して、このモデルから作成されたすべてのドロップダウンに適用できるという利点もあります。

/* Model Standard.php */

public function getDropdown(){
      return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}

これをビューファイルで次のように使用できます。

echo $form->field($model, 'attribute')
        ->dropDownList(
            $model->dropDown
        );
5
Joe Miller

ActiveFormでは次を使用します。

<?=
    $form->field($model, 'state_id')
         ->dropDownList(['Prompt' => '---- Select State ----'])
         ->label('State')
?>
5
Bhola Singh

あなたがリストの一番下に行った場合。いくつかのphpコードを保存し、次のように必要に応じてDBからすべてを戻します。

 $items = Standard::find()->select(['name'])->indexBy('s_id')->column();
1