/** * Renders a radio button. * 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 radio button. 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 radio button 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 radio within the label. * If true, the method will still use [[template]] to layout the checkbox and the error message * except that the radio is enclosed by the label tag. * @return $this the field object itself */ public function radio($options = [], $enclosedByLabel = true) { if ($enclosedByLabel) { $this->parts['{input}'] = Html::activeRadio($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::activeRadio($this->model, $this->attribute, $options); } $this->adjustLabelFor($options); return $this; }