CodeIgniter: как вернуть данные из обратного вызова проверки формы - PullRequest
2 голосов
/ 28 февраля 2012

Вот мое правило проверки формы CI:

$datetime_string = $this->form_validation->set_rules('event_date', 'Select', 'callback_date_validate');

Вот мой обратный вызов:

function date_validate($select_value)
{
    $year = '';
    $month = '';
    $day = '';
    $hour = '';
    $minutes = '';

    $datetime = $this->input->post('event_date');
    if (strpos($datetime, ' @ ') !== 'FALSE' && $datetime != '')
    { 
        $datetime_explode = explode(' @ ', $datetime);
        if (strpos($datetime_explode[0], '/') !== 'FALSE' && $datetime_explode != '')
        {
            $date_explode = explode('/', $datetime_explode[0]);
            $year = $date_explode[2];
            $month = $date_explode[1];
            $day = $date_explode[0];    
        }
        if (strpos($datetime_explode[1], ':') !== 'FALSE')
        {
            $time_explode = explode(':', $datetime_explode[1]);
            $hour = $time_explode[0];
            if (strpos($time_explode[1], ' ') !== 'FALSE')
            {
                $minutes_explode = explode(' ', $time_explode[1]);
                $minutes = $minutes_explode[0];
                $am_pm = $minutes_explode[1];

                if ($am_pm == 'PM' || $am_pm == 'pm')
                    $hour += 12;    
            }
        }
    }

    $datetime_string = $year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minutes . ':00';

    if (!preg_match('/^\d{4}-\d{2}-\d{2} 2[0-3]|[01][0-9]:[0-5][0-9]:[0-5][0-9]$/', $datetime_string))
    {
        $this->form_validation->set_message('date_validate', 'Oops');
    }
    else // user picked something
    {
        return $datetime_string;
    }
}

Согласно документации по CI, вы можете вернуть данные из обратного вызова проверки формы,но, установив правило равным переменной, я получаю эту ошибку:

Object of class CI_Form_validation could not be converted to string

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Я думаю, что проблема в этой строке:

$datetime = $this->input->post('event_date');

Значение поля event_date фиксируется в параметре вашей функции $ select_value, попробуйте использовать ваш параметр вместо данных публикации.

0 голосов
/ 18 октября 2012

Не знаю, решали ли вы когда-нибудь это, но я копался в документации, удивляясь тому же, что и ваш вопрос.

Прежде всего, вы просто хотите ...
$this->form_validation->set_rules('event_date', 'Select', 'callback_date_validate');
Не присваивайте ее переменной.

Далее вы хотите запустить свои правила проверки / обратные вызовы ...

if ($this->form_validation->run() == TRUE) {
    // VALIDATION OK, CHECK OUR CALLBACK DATA
    var_dump($this->input->post());
}

Теперь вы должны увидеть свои данные, возвращенные изобратный вызов в ... $this->input->post('event_date');

То, что меня смутило при возврате данных из обратных вызовов, было этой веткой на официальных форумах CI ... http://codeigniter.com/forums/viewthread/191087/, где люди предполагают, что обратный вызов не 'изменить POSTed данные.Они только частично верны.Это не меняет его в $_POST['whatever'], но меняет его в $this->input->post('whatever')

Поскольку это был третий результат в Google, я надеюсь, что это кому-нибудь поможет.

0 голосов
/ 28 февраля 2012

$this->form_validation->set_rules(...); следует называть встроенным, а не назначать переменной.Вы присвоили его $datetime_string.Удалить это назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...