如何使一个dropdown
在yii2
使用activeform
和模式?由于所有方法都已改变yii2
,如何在新的方法中完成?
看来你已经找到了你的答案,但是既然你提到了活动形式,我将再贡献一个,即使它只是微不足道.
<?php $form = ActiveForm::begin(); echo $form->field($model, 'attribute') ->dropDownList( $items, // Flat array ('id'=>'label') ['prompt'=>''] // options ); ActiveForm::end(); ?>
也许我错了,但我认为从查看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(); ?>
看看这个:
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-']) ?>
看来这个问题有很多好的答案.所以我会尽量给出详细的答案
活动表格和硬编码数据
<?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']); ?>
上面有一些很好的解决方案,我的只是两个的组合(我来这里寻找解决方案).
@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
<?= $form->field($model, 'attribute_name')->dropDownList( ArrayHelper::map(Table_name::find()->all(),'id','field_name'), ['prompt' => 'Select'] ) ?>
这将帮助您...不要忘记在标题中使用类文件.
它像是
<?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) ?>
这是关于生成数据,因此从模型更适当地完成.想象一下,如果你想改变数据在下拉框中的显示方式,比如添加姓氏或其他东西.您必须找到每个下拉框并更改arrayHelper
.我在模型中使用函数来返回下拉列表的数据,因此我不必在视图中重复代码.它还有一个优点,我可以在这里指定过滤器,并将它们应用于从该模型创建的每个下拉列表;
/* Model Standard.php */ public function getDropdown(){ return ArrayHelper::map(self::find()->all(), 's_id', 'name')); }
你可以在你的视图文件中使用它;
echo $form->field($model, 'attribute') ->dropDownList( $model->dropDown );
在ActiveForm
使用中:
<?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?>