正しいElijan Sejicの答えに加えて、検証ルールの設定とエラーと値の取得に役立つ次の関数を作成しました。
MY_Form_validation.php で:
function set_rules_array($name, $label, $rules)
{
for ($i = 0; $i < count($_POST[$name]); $i++)
{
$this->set_rules("{$name}[$i]", $label, $rules);
}
}
私が呼んでいるヘルパーでform2
:
function form2_error($name)
{
static $array_fields = array();
// if the last 2 characters are [], then handle this as an array field.
if (substr($name, -2) === '[]')
{
// If this field has been form2_error'd before, then increment the index, otherwise set to zero.
$array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
$name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
}
return form_error($name);
}
function form2_set_value($name)
{
static $array_fields = array();
// if the last 2 characters are [], then handle this as an array field.
if (substr($name, -2) === '[]')
{
// If this field has been form2_error'd before, then increment the index, otherwise set to zero.
$array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
$name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
}
return set_value($name);
}
これは、フォームに「さらに追加」ボタンがあり、予想される配列要素の数がわからない場合に特に便利です。