如何在 Select2 Widget 中添加占位符 - Yii2

Posted

技术标签:

【中文标题】如何在 Select2 Widget 中添加占位符 - Yii2【英文标题】:How to add a placeholder to Select2 Widget - Yii2 【发布时间】:2018-10-25 10:35:29 【问题描述】:

我正在处理一个 yii2 页面,但在向 Select2 Widget 添加占位符或提示时出现问题。这是我的代码:

<?php

use yii\helpers\html;
use kartik\widgets\ActiveForm;
use kartik\builder\Form;
use kartik\datecontrol\DateControl;
use yii\helpers\ArrayHelper;

/**
 * @var yii\web\View $this
 * @var app\models\FinancialAccounts $model
 * @var yii\widgets\ActiveForm $form
 */
?>

<div class="financial-accounts-form">

    <?php $form = ActiveForm::begin(['type' => ActiveForm::TYPE_VERTICAL]); echo Form::widget([

        'model' => $model,
        'form' => $form,
        'columns' => 1,
        'attributes' => [

            'type_id' => ['type' => Form::INPUT_WIDGET, 'widgetClass'=>'\kartik\widgets\Select2', 'options' => ['data'=>ArrayHelper::map(app\models\FinancialAccountType::find()->all(), 'type_id', 'name')]],

            'account_name' => ['type' => Form::INPUT_TEXT, 'options' => ['placeholder' => 'Enter Account Name...', 'maxlength' => 100]],

            'account_code' => ['type' => Form::INPUT_TEXT, 'options' => ['placeholder' => 'Enter Account Code...', 'maxlength' => 10]],

            'parent_id' => ['type' => Form::INPUT_WIDGET, 'widgetClass'=>'\kartik\widgets\Select2', 'options' => ['data'=>ArrayHelper::map(app\models\FinancialAccounts::find()->all(), 'account_id', 'account_name'), 'placeholder' => 'Select a Parent Account...']],

            'description' => ['type' => Form::INPUT_TEXT, 'options' => ['placeholder' => 'Enter Description...', 'maxlength' => 250]],

        ],

    ]);

    echo Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'),
        ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']
    );
    ActiveForm::end(); ?>

</div>

问题出在 parent_id 属性中,因为我无法像大多数教程推荐的那样添加占位符作为选项。每次我尝试这样做时,都会收到如下错误:

Unknown Property – yii\base\UnknownPropertyException
Setting unknown property: kartik\widgets\Select2::placeholder

有谁知道我该如何解决这个问题?我的主要问题是提交数据时不能将此选项留空,但这是一种可能。它迫使我提交一个选定的项目。

【问题讨论】:

【参考方案1】:

您会注意到,如果您仔细遵循documentation 中的示例,placeholder 需要包装在 options 数组中。

'parent_id'     => [
    'type'        => Form::INPUT_WIDGET,
    'widgetClass' => '\kartik\widgets\Select2',
    'options'     => [
        'data'        => ArrayHelper::map(app\models\FinancialAccounts::find()
            ->all(), 'account_id', 'account_name'),
        'options'       => ['placeholder' => '...'],
        'pluginOptions' => ['allowClear' => true],
    ]
],

【讨论】:

哇,这太棒了。按预期工作。从来没有想过我必须将选项放在另一个选项中。非常感谢。

以上是关于如何在 Select2 Widget 中添加占位符 - Yii2的主要内容,如果未能解决你的问题,请参考以下文章

select2 占位符显示空选项

占位符上的 Select2 字体真棒图标

重置 select2 值并显示占位符

如何修复 select2 的占位符在文档准备好时被截断?

如何更改select2中的占位符?

如何为搜索输入制作 select2 占位符