如何在yii2中完全在输入标记之外生成带有标签标签的单选按钮

时间:2016-08-12 09:07:25

标签: html yii2 radio-button

Yii2 HTML::radio()帮助器生成html输入标记,在该输入周围带有标签标记,如下所示:

<label>
   <input type="radio" name="abc" value="1"> Hello
</label>

但我需要这样:

<input type="radio" name="abc" value="1" id="radio1">
<label for "radio1">Hello</label>

radio helper内可以使用custozime吗?

1 个答案:

答案 0 :(得分:0)

不,你不能。正如您从yii\helper\BaseHtml类代码中看到的那样,这种标记嵌套来自radio()方法的源代码,无需通过更改选项进行配置。

您需要的是覆盖该方法。这真的很容易。

  1. 在命名空间app\helpers中,创建类Html。把它放到一个名为/Helpers/Html.php的新文件中,相对于你的应用程序根目录(如果你有Yii基本应用程序),并把这样的东西放在里面:
  2. 
        namespace app\helpers;
    use Yii; use yii\helpers\BaseHtml;
    class Html extends BaseHtml { public static function radio($name, $checked = false, $options = []) { $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 radio button is not selected, it still submits a value $hidden = static::hiddenInput($name, $options['uncheck']); unset($options['uncheck']); } else { $hidden = ''; } if (isset($options['label'])) { $label = $options['label']; $labelOptions = isset($options['labelOptions']) ? $options['labelOptions'] : []; unset($options['label'], $options['labelOptions']); $content = static::input('radio', $name, $value, $options); $content .= static::label($label, null, $labelOptions); return $hidden . $content; } else { return $hidden . static::input('radio', $name, $value, $options); } } }

    说明:

      

    我们刚刚从radio()复制了yii\helpers\BaseHtml方法的代码,并将包含static::label()的行更改为单独输出static::input();  

     由于原始类和我们的自定义类都扩展yii\helpers\BaseHtml,并且原始yii\helpers\Html没有重新定义任何BaseHtml方法,因此除了无线电之外的元素的逻辑不会丢失。  

     命名空间和类名不应该完全相同,但显然它们应该与yii\helpers\Html不同。

    1. 只需在视图代码中将use yii\helpers\Html;替换为use app\helpers\Html;
    2. 这就是全部!