メモ CodeIgniter set_value()がわかった。

CodeIgniter

system/hepler/form_helper.php

確認画面から、フォームに戻った時にどうして、set_value()で値がなぜか取れない。
なぜ取れないのかわからない(T-T)
ということで、調べてみました。

(T-T).o(けっこう恥ずかしい理由だったわけですが、あえて公開です。)

<?php
/**
 * Form Value
 *
 * Grabs a value from the POST array for the specified field so you can
 * re-populate an input field or textarea.  If Form Validation
 * is active it retrieves the info from the validation class
 *
 * @access	public
 * @param	string
 * @return	mixed
 */
if ( ! function_exists('set_value'))
{
    function set_value($field = '', $default = '')
    {
        if (FALSE === ($OBJ =& _get_validation_object()))
        {
            if ( ! isset($_POST[$field]))
            {
                return $default;
            }
            return form_prep($_POST[$field], $field);
        }
        return form_prep($OBJ->set_value($field, $default), $field);
    }
}
?>

で、form_validationのset_valueメソッドの

return $this->_field_data[$field]['postdata'];

$this->_field_data[$field][‘postdata’];がNULLだったりする・・・orz
($this->_field_data[$field]にはきちんとデータが格納されている。)
なので、set_value(“hogehoge”);で値が取れない。

form_validationのset_value

<?php
function set_value($field = '', $default = '')
	{
		if ( ! isset($this->_field_data[$field]))
		{
			return $default;
		}
		
		return $this->_field_data[$field]['postdata'];
	}
?>

$this->_field_data[$field][‘postdata’];がnullなので、returnで値が帰ってきてもnull…..

ではどこでこの値をセットしているかをみてみると、
Form_validation.php 333行目あたり。
function run()内で処理されてる。

$this->form_validation->run();
を実行した後でなければ、set_value(“フィールド名”,”初期値”);で、POSTで送信したデータが取れないようです。
確認画面から、フォームに戻った時にどうして、set_value()で値がとれないのか謎でしたがようやく納得しました。