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