終電23時11分って早くね?

都内のIT企業で働くカラオケ大好きエンジニアの雑記

Laravelでradioボタン生成の際にid属性を付与する

Laravelでラジオボタンを生成する際ですが、

http://laravel4.kore1server.com/docs/html#checkboxes-and-radio-buttons

こちらのドキュメントにもある通り、

// チェックボックスの生成
echo Form::checkbox('name', 'value');

// ラジオボタンの生成
echo Form::radio('name', 'value');

とすることで、

<input name="name" value="value" type="radio">

<input name="name" value="value" type="checkbox">

このようなHTMLが生成されます。簡単ですね!


で、ここで悩んだのが、

http://laravel4.kore1server.com/docs/html#labels

このラベルとの組み合わせで使いたい場合です。

男女の選択のラジオボタンがあって、ラベルが付いていてクリックでチェックが付けれる

というような要件を満たすためには、ラジオボタン(ないしはチェックボックス)に
id属性が付与されている必要があります。

そこで、ラジオボタンのドキュメント部分には書いてないのですが、
ラベルのドキュメント部分に

追加のHTML要素の指定
echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));

というのがありまして、ラベル生成時の最後の引数に、
配列で渡してあげることで、属性が付けられる模様・・・
ということで、

// ラジオボタンの生成
echo Form::radio('name', 'value', array('id'=>'hoge'));

という風に渡してみたんですが、属性はつかず。。。

ただ、オプションとして渡せそうだしなーーということで、
Laravelフレームワーク内のソースコードを追っていくとありました!

/vendor/laravel/framework/src/Illuminate/Html/FormBuilder.php : 500行目

public function radio($name, $value = null, $checked = null, $options = array())
{
     if (is_null($value)) $value = $name;

     return $this->checkable('radio', $name, $value, $checked, $options);
}

はいー結果、第4引数にオプションが渡せる形でした!
(第3引数はデフォルトでチェックをONにするかどうかのフラグ)

にゃので・・・

// ラジオボタンの生成
echo Form::radio('name', 'value', false ,array('id'=>'hoge'));

とすることで、

<input name="name" value="value" type="radio" id="hoge">

のようにid属性の付与ができましたとさ!!

一応上であげた、

男女の選択のラジオボタンがあって、ラベルが付いていてクリックでチェックが付けれる

のサンプルも出してみると、

// ラジオボタンの生成(男)
echo Form::radio('sex', '男' ,false , array('id' => 'men'));

// ラベルの生成(男)
echo Form::label('men', '男');

// ラジオボタンの生成(女)
echo Form::radio('sex', '女' ,false , array('id' => 'women'));

// ラベルの生成(女)
echo Form::label('women', '女');

とすることで、

<input id="men" name="sex" type="radio" value="男"><label for="men"></label>
<input id="women" name="sex" type="radio" value="女"><label for="women"></label>

となり、期待通りの出力ができました^^