'form-check-input']); if (!isset($itemOptions['labelOptions'])) { $itemOptions['labelOptions'] = ['class' => 'form-check-label']; } else { static::addCssClass($itemOptions['labelOptions'], ['bootstrap' => 'form-check-label']); } $wrapperOptions = $inline ? ['class' => 'form-check form-check-inline'] : ['class' => 'form-check']; $encode = ArrayHelper::getValue($options, 'encode', true); $options['item'] = function ($index, $label, $name, $checked, $value) use ($itemOptions, $wrapperOptions, $encode) { $itemOptions['value'] = $value; if (!isset($itemOptions['label'])) { $itemOptions['label'] = $encode ? static::encode($label) : $label; } return static::tag('div', static::radio($name, $checked, $itemOptions), $wrapperOptions); }; } return parent::radioList($name, $selection, $items, $options); } /** * {@inheritdoc} * Pass `true` in `$options['inline']` to generate {@see https://getbootstrap.com/docs/5.1/forms/checks-radios/#inline inline list}. */ public static function checkboxList($name, $selection = null, $items = [], $options = []): string { $inline = ArrayHelper::remove($options, 'inline', false); if (!isset($options['item'])) { $itemOptions = ArrayHelper::remove($options, 'itemOptions', []); static::addCssClass($itemOptions, 'form-check-input'); if (!isset($itemOptions['labelOptions'])) { $itemOptions['labelOptions'] = ['class' => 'form-check-label']; } else { static::addCssClass($itemOptions['labelOptions'], 'form-check-label'); } $wrapperOptions = $inline ? ['class' => 'form-check form-check-inline'] : ['class' => 'form-check']; $encode = ArrayHelper::getValue($options, 'encode', true); $options['item'] = function ($index, $label, $name, $checked, $value) use ($itemOptions, $wrapperOptions, $encode) { $itemOptions['value'] = $value; if (!isset($itemOptions['label'])) { $itemOptions['label'] = $encode ? static::encode($label) : $label; } return static::tag('div', static::checkbox($name, $checked, $itemOptions), $wrapperOptions); }; } return parent::checkboxList($name, $selection, $items, $options); } /** * {@inheritdoc} */ public static function error($model, $attribute, $options = []): string { static::addCssClass($options, 'invalid-feedback'); return parent::error($model, $attribute, $options); } /** * {@inheritdoc} */ protected static function booleanInput($type, $name, $checked = false, $options = []): string { $options['checked'] = (bool)$checked; $value = array_key_exists('value', $options) ? $options['value'] : '1'; if (isset($options['uncheck'])) { // add a hidden field so that if the checkbox is not selected, it still submits a value $hiddenOptions = []; if (isset($options['form'])) { $hiddenOptions['form'] = $options['form']; } $hidden = static::hiddenInput($name, $options['uncheck'], $hiddenOptions); unset($options['uncheck']); } else { $hidden = ''; } if (isset($options['label'])) { $label = $options['label']; $labelOptions = $options['labelOptions'] ?? []; unset($options['label'], $options['labelOptions']); if (!isset($options['id'])) { $options['id'] = static::getId(); } $input = static::input($type, $name, $value, $options); if (isset($labelOptions['wrapInput']) && $labelOptions['wrapInput']) { unset($labelOptions['wrapInput']); $content = static::label($input . $label, $options['id'], $labelOptions); } else { $content = $input . "\n" . static::label($label, $options['id'], $labelOptions); } return $hidden . $content; } return $hidden . static::input($type, $name, $value, $options); } /** * Returns an autogenerated ID * @return string Autogenerated ID */ protected static function getId(): string { return static::$autoIdPrefix . static::$counter++; } }