【问题标题】:Yii2 - Making dropdown list from db structure not the the inserted data in dbYii2 - 从数据库结构而不是数据库中插入的数据制作下拉列表
【发布时间】:2016-08-16 05:03:36
【问题描述】:

我有一个表单页面,其中一个字段名为type,它是enum('lost', 'found'),在这个表单中,我希望该字段是一个下拉列表,只有lostfound 这两个选项.
建议的选项之一是在 view

中使用它
 <?= $form->field($model, 'type')->dropDownList(
            $items,
            ['prompt'=>'']

这在 控制器

$items = ArrayHelper::map(Ads::find()->all(), 'id', 'type');  

但正如您所知,它只是使用数据库中插入的数据,如果我单击下拉列表,它将加载数据库中所有丢失和找到的选项。
有没有办法告诉 yii 使用 db 结构和规则而不是数据?

我必须指出,在模型中我找不到任何指示枚举部分的规则,可以吗?为什么会这样?
我使用 Gii 来创建这些。

public function rules()
{
    return [
        [['type', 'explanation', 'image', 'cost', 'province_id', 'address'], 'required'],
        [['type', 'explanation', 'image', 'address'], 'string'],
        [['cost'], 'integer'],
        [['province_id'], 'string', 'max' => 20],
        [['province_id'], 'exist', 'skipOnError' => true, 'targetClass' => Province::className(), 'targetAttribute' => ['province_id' => 'name']],
    ];
}  

【问题讨论】:

    标签: forms yii2 gii


    【解决方案1】:

    当归档类型是枚举并从gii生成crud时,yii会自动在你的表单中生成这种下拉列表。

    <?= $form->field($model, 'type')->dropDownList([ 'lost' => 'Lost', 'found' => 'Found', ], ['prompt' => '']) ?>
    

    在模型中它的类型是字符串:

     public function rules()
        {
            return [
                  [['type'], 'string'],
    

    【讨论】:

    • 这不是 gii 创造的,这就是我为此所做的。 Gii 以正常方式创建。如下所示:&lt;?= $form-&gt;field($model, 'type') ?&gt;
    • 你确定字段'type'是枚举数据类型吗?
    • 是的,但正如我所说,我不明白为什么在模型中没有与枚举部分相关的内容。我已经在模型中发布了规则。
    • @Amir,很奇怪,我去查一下。
    • @Amir 我在用户表中添加了 type 字段并生成了一个 crud,我可以看到这个 dorpdown 代码:&lt;?= $form-&gt;field($model, 'type')-&gt;dropDownList([ 'lost' =&gt; 'Lost', 'found' =&gt; 'Found', ], ['prompt' =&gt; '']) ?&gt; 由 Gii 生成。
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多