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吗?
答案 0 :(得分:0)
yii\helper\BaseHtml
类代码中看到的那样,这种标记嵌套来自radio()
方法的源代码,无需通过更改选项进行配置。
您需要的是覆盖该方法。这真的很容易。
app\helpers
中,创建类Html
。把它放到一个名为/Helpers/Html.php
的新文件中,相对于你的应用程序根目录(如果你有Yii基本应用程序),并把这样的东西放在里面:
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
不同。
use yii\helpers\Html;
替换为use app\helpers\Html;
。这就是全部!