如何在yii2中创建一个下拉列表?

Den*_*G B 83 php drop-down-menu yii2

如何使一个dropdownyii2使用activeform和模式?由于所有方法都已改变yii2,如何在新的方法中完成?

Den*_*G B 118

它像是

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

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

Yii2中的ArrayHelper替换Yii 1.1中的CHtml列表数据.[请从控制器加载数组数据]

编辑

从控制器加载数据.

调节器

$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Run Code Online (Sandbox Code Playgroud)

在视图中

<?= Html::activeDropDownList($model, 's_id',$items) ?>
Run Code Online (Sandbox Code Playgroud)

  • 请不要直接遵循此示例,并在视图中提取数据/构建逻辑! (11认同)
  • @Auine你创建了自己的模式吗?mvc,mvvm等都描述了关注点的分离.一个视图应该只关注显示它给出的数据 - 它不应该执行查询,GET等.如果你不想坚持其中一种模式,那也很酷 - 但它会让事情变得更加困难您需要在将来换出视图以支持不同的平台.上面提到的作者编辑的答案是MVC中更理想的解决方案 - 在控制器中具有find()并将数据传递给视图渲染. (2认同)

ipp*_*ppi 89

看来你已经找到了你的答案,但是既然你提到了活动形式,我将再贡献一个,即使它只是微不足道.

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

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

    ActiveForm::end();
?>
Run Code Online (Sandbox Code Playgroud)


joh*_*ils 56

上面有一些很好的解决方案,我的只是两个的组合(我来这里寻找解决方案).

@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')
            )
?>
Run Code Online (Sandbox Code Playgroud)

再次,完全归功于:@Sarvar Nishonboyev和@ippi


Mid*_*hun 21

看来这个问题有很多好的答案.所以我会尽量给出详细的答案

活动表格和硬编码数据

<?php
    echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
Run Code Online (Sandbox Code Playgroud)

要么

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
Run Code Online (Sandbox Code Playgroud)

活动表单和数据库表中的数据

我们将使用ArrayHelper,因此首先将它添加到名称空间中

<?php
    use yii\helpers\ArrayHelper;
?>
Run Code Online (Sandbox Code Playgroud)

ArrayHelper有许多使用完整函数,可用于处理数组map()是我们将在这里使用的函数,这个函数有助于从多维数组或对象数组中制作一个(键 - 值对)映射.

<?php
    echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Run Code Online (Sandbox Code Playgroud)

不属于活动形式

<?php
    echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
Run Code Online (Sandbox Code Playgroud)

要么

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
Run Code Online (Sandbox Code Playgroud)

不是活动表单而是db表中的数据

<?php
    echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Run Code Online (Sandbox Code Playgroud)


Sar*_*oev 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-']) ?>
Run Code Online (Sandbox Code Playgroud)


Des*_*eiL 10

也许我错了,但我认为从查看SQL查询是个坏主意

这是我的方式

在控制器中

$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');


return $this->render('view',['model'=>$model, 'items'=>$items])
Run Code Online (Sandbox Code Playgroud)

并在视图中

<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Run Code Online (Sandbox Code Playgroud)

或者使用ActiveForm

<?php $form = ActiveForm::begin(); ?>
 <?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)


Kal*_*i S 8

<?= $form->field($model, 'attribute_name')->dropDownList(
         ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
        ['prompt' => 'Select']
) ?>
Run Code Online (Sandbox Code Playgroud)

这将帮助您...不要忘记在标题中使用类文件.


小智 5

ActiveForm使用中:

<?=
    $form->field($model, 'state_id')
         ->dropDownList(['prompt' => '---- Select State ----'])
         ->label('State')
?>
Run Code Online (Sandbox Code Playgroud)


Joe*_*ler 5

这是关于生成数据,因此从模型更适当地完成.想象一下,如果你想改变数据在下拉框中的显示方式,比如添加姓氏或其他东西.您必须找到每个下拉框并更改arrayHelper.我在模型中使用函数来返回下拉列表的数据,因此我不必在视图中重复代码.它还有一个优点,我可以在这里指定过滤器,并将它们应用于从该模型创建的每个下拉列表;

/* Model Standard.php */

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

你可以在你的视图文件中使用它;

echo $form->field($model, 'attribute')
        ->dropDownList(
            $model->dropDown
        );
Run Code Online (Sandbox Code Playgroud)