如何设置Yii2的ActiveForm复选框为选中状态?

4
我正在寻找一个简单的解决方案来为Yii2 ActiveForm复选框控件设置“已选”状态,但我找不到如何设置它的解决方案。文档中没有任何示例。我尝试过操纵渲染代码。
<?= $form->field($model, 'name')->checkbox()->label('Hi'); ?>

但是似乎我需要修改ActiveForm本身。如何使复选框默认选中?

3个回答

2

好的,我已经进行了一段时间的调试并找到了解决方案,它位于BaseHtml.php文件的activeCheckbox()函数中的第1359行

$checked = "$value" === "{$options['value']}";

它检查模型变量的默认值:

class SomeForm extends Model
{
    public $name = true;

同时,'value'选项中必须分配相同类型的值。

<?= $form->field($model, 'name')->checkbox(['value' => true])->label('Hi'); ?>

我认为对于这种微不足道的功能来说,它过于复杂了。

2

在我的代码中,status 的值为 0 或 1。

因此,对于选中的复选框,我声明了 <?php $model->status = 1; ?>

<?php $model->status = 1; ?>
<?= $form->field($model, 'status')->checkbox()->label('Hi'); ?>

例如,如果你有一个复选框的名称有两个值,即 PHP 或 Java。那么,声明为<?php $model->name = 'Java'; ?> 就可以让 Java 被 checked
//Your Code

<?php $model->name = 'Java'; ?>
<?= $form->field($model, 'name')->checkbox()->label('Hi'); ?>

2
请告诉我为什么会被踩。那些踩的人,你们在自己的系统中试过了吗?有些人只是来 Stack Overflow 踩人的。如果你认为这个答案没有用,请给出理由或建议。不要轻易踩人 - Nana Partykar
1
我同意你的观点,这个答案是遵循Yii方式在表单加载时设置复选框选中的唯一答案,给你加一分,向那些踩你的人发起威胁。** ̿ ̿'̿'\̵͇̿̿\з=(•_•)=ε/̵͇̿̿/'̿'̿ ̿** - Muhammad Omer Aslam

1
如果我想在创建时拥有一个选中的复选框,我可以在视图中做如下操作:
if ($model->isNewRecord) {
    $model->status = TRUE;
}

我知道这不是一个优雅的解决方案,但它确实有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接