2016-08-12 57 views
0

Yii2 HTML::radio()帮手与标签标签完全外部输入标签单选按钮生成html input标签与周围像这样的输入标签标签:如何产生yii2

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

但我需要这样的:

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

它是否可以custozime这里面radio helper

回答

0

不,你不能。从yii\helper\BaseHtml类代码可以看出,这种嵌套标签来自radio()方法的源代码,无需通过更改选项进行配置。

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

  1. 在命名空间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); } } }

说明:

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

由于原创和我们的自定义类扩展yii\helpers\BaseHtml,并且原始yii\helpers\Html未重新定义任何BaseHtml方法,所以除了无线电以外的元素的逻辑将不会丢失。

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

  • 只是在你查看的代码替换use yii\helpers\Html;use app\helpers\Html;
  • 就这样!