Используйте проверку формы CodeIgniter в представлении - PullRequest
0 голосов
/ 05 февраля 2011

У меня есть нижний колонтитул, который присутствует на всех моих страницах и содержит форму. Я хотел бы иметь возможность использовать библиотеку проверки формы CI для проверки формы. Это возможно?

В настоящее время форма отправляет обратно на текущую страницу, используя переменную среды PHP_SELF. Я не хочу, чтобы он отправлялся на контроллер, потому что, когда проверка не удалась, он загружает имя контроллера в адресную строку, что не соответствует желаемому поведению.

Любые предложения с благодарностью приняты.

Спасибо

Gaz

Ответы [ 3 ]

0 голосов
/ 06 февраля 2011

В этом случае я бы определенно пошел на вызов AJAX к универсальному контроллеру. Это позволяет отображать ошибки даже перед отправкой на исходную страницу.

Другой способ (немного более сложный) заключается в публикации данных формы в универсальном методе контроллера с передачей скрытого ввода, содержащего текущий URL.

Общий метод контроллера, обрабатывающий вашу форму, может затем перенаправить на страницу, на которой пользователь отправил форму, передав ей ошибки проверки или сообщение об успешном завершении с использованием переменных сеанса flash: $this->session->set_flashdata('errors',validation_errors()) может помочь (не проверено)

Хорошая вещь об этом заключается в том, что вы можете использовать универсальный метод обработки форм как для случая ajax (подавление перенаправления), так и для случая без ajax

0 голосов
/ 07 февраля 2011

AJAX был бы лучшим, как и все остальные.

Я бы перенаправил форму на одну функцию в одном контроллере, вы могли бы создать контроллер только для самой формы.Затем имейте скрытое значение с обратным URL.Что касается ошибок, вы можете отправить их обратно с помощью flashdata.

Только не забывайте никогда не копировать код вставки, это плохая практика и гарантирует ошибки.

//make sure you load the proper model
if ($this->form_validation->run() == FALSE){
    // invalid
    $redirect = $this->input->post('url');
    $this->session->set_flashdata('errors',validation_errors());
    redirect($redirect);
} else {
    /*
        success, do what you want here
    */
    redirect('send them where ever');
}
0 голосов
/ 05 февраля 2011

Один из способов, хотя и далек от идеала, - создать функцию «контакт» в каждом контроллере.Это может быть в форме библиотеки / помощника.

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

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