CodeIgniterでのHTML Validation(Formヘルパー編)
Formヘルパー編以外が今後出てくるかどうかは分かりませんが。
HTMLの検証を行うのは当然の事です。「動けば良い」なんてのは愚者の戯言です。
ある程度の機能を作って一段落した後、The W3C Markup Validation Serviceでチェックしていたら、1つエラーが見つかった。ソースを見てみると、Formヘルパーで作られたinput要素だった。ソースは以下。
<?= form_upload(array('name' => 'icon', 'id' => 'icon')) ?>
そして生成されたHTMLは以下
<input type="file" id="icon" value="" name="icon">
何がおかしいって、配列で指定しているのはnameとid属性だけなのに、value属性が勝手に入ってしまっている。これのせいで検証でエラーになってしまっていた。
Formヘルパー使わないって手もあると思う。微妙に嫌いだし。
でも、使う時にまた同じ検証エラーが出るのも面倒なので、applicationディレクトリレベルで修正してみた。本家で修正されれば何も問題ないけど。
修正したファイルは
- application/helpers/form_helper.php
以下全文。
<?php function form_input($data = '', $value = '', $extra = '') { $defaults = array( 'type' => 'text', 'name' => (( ! is_array($data)) ? $data : '') ); if ($value != '') { $defaults['value'] = $value; } return "<input "._parse_form_attributes($data, $defaults).$extra." />"; } require_once('./system/helpers/form_helper.php');
元のsystem/helpers/form_helper.phpでは$defaultsに問答無用でvalueが入っており、これが原因になっていた。んで、元のsystem以下の同名のファイルをrequire_onceする事で、コントローラで使う時に何も考えなくて済むという感じ。
http://codeigniter.jp/user_guide_ja/helpers/form_helper.html