/**
  * Renders a checkbox.
  * This method will generate the "checked" tag attribute according to the model attribute value.
  * @param array $options the tag options in terms of name-value pairs. The following options are specially handled:
  *
  * - uncheck: string, the value associated with the uncheck state of the radio button. If not set,
  *   it will take the default value '0'. This method will render a hidden input so that if the radio button
  *   is not checked and is submitted, the value of this attribute will still be submitted to the server
  *   via the hidden input. If you do not want any hidden input, you should explicitly set this option as null.
  * - label: string, a label displayed next to the checkbox. It will NOT be HTML-encoded. Therefore you can pass
  *   in HTML code such as an image tag. If this is coming from end users, you should [[Html::encode()|encode]] it to prevent XSS attacks.
  *   When this option is specified, the checkbox will be enclosed by a label tag. If you do not want any label, you should
  *   explicitly set this option as null.
  * - labelOptions: array, the HTML attributes for the label tag. This is only used when the "label" option is specified.
  *
  * The rest of the options will be rendered as the attributes of the resulting tag. The values will
  * be HTML-encoded using [[Html::encode()]]. If a value is null, the corresponding attribute will not be rendered.
  *
  * If you set a custom `id` for the input element, you may need to adjust the [[$selectors]] accordingly.
  *
  * @param boolean $enclosedByLabel whether to enclose the checkbox within the label.
  * If true, the method will still use [[template]] to layout the checkbox and the error message
  * except that the checkbox is enclosed by the label tag.
  * @return $this the field object itself
  */
 public function checkbox($options = [], $enclosedByLabel = true)
 {
     if ($enclosedByLabel) {
         $this->parts['{input}'] = Html::activeCheckbox($this->model, $this->attribute, $options);
         $this->parts['{label}'] = '';
     } else {
         if (isset($options['label']) && !isset($this->parts['{label}'])) {
             $this->parts['{label}'] = $options['label'];
             if (!empty($options['labelOptions'])) {
                 $this->labelOptions = $options['labelOptions'];
             }
         }
         unset($options['labelOptions']);
         $options['label'] = null;
         $this->parts['{input}'] = Html::activeCheckbox($this->model, $this->attribute, $options);
     }
     $this->adjustLabelFor($options);
     return $this;
 }