86

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

4

13 に答える 13

127

のようです

<?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) ?>
于 2014-02-05T05:59:40.827 に答える
57

上記のいくつかの良い解決策があり、私のものは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 と @ippi の功績を認めてください。

于 2014-06-05T05:58:48.620 に答える
22

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

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

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

アクティブなフォームではなく、データベース テーブルからのデータ

<?php
    echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
于 2015-09-19T06:37:33.327 に答える
15

これを見てください:

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-']) ?>
于 2014-04-01T05:27:57.580 に答える
11

たぶん私は間違っているかもしれませんが、ビューからの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) ?>

またはアクティブフォームを使用して

<?php $form = ActiveForm::begin(); ?>
 <?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
于 2015-06-11T16:53:18.503 に答える
5

ActiveFormちょうど使用中:

<?=
    $form->field($model, 'state_id')
         ->dropDownList(['prompt' => '---- Select State ----'])
         ->label('State')
?>
于 2014-09-12T13:11:42.933 に答える
5

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

/* Model Standard.php */

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

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

echo $form->field($model, 'attribute')
        ->dropDownList(
            $model->dropDown
        );
于 2015-12-16T12:56:29.607 に答える
1

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

 $items = Standard::find()->select(['name'])->indexBy('s_id')->column();
于 2017-08-18T14:26:31.780 に答える
-3

フォローも可能です。先頭にアイコンを追加する場合。これは役に立ちます。

<?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();?>
于 2014-03-27T12:28:30.337 に答える