CodeIgniter загружает представление - PullRequest
2 голосов
/ 18 июля 2011

Функция в контроллере User загружает форму регистрации, например:

public function signup()
    {
        $this->load->view('form_view'); 
    }

Таким образом, URL-адрес формы регистрации будет выглядеть как root/user/signup (игнорировать index.php)

form_view имеет форму, которая передается другому методу в том же контроллере, скажем, process(), например.

<? echo form_open('user/process') ?>

После отправки формы она переходит к user/process,который содержит код проверки.Если есть какая-либо ошибка проверки, он снова загрузит form_view и передаст данные ошибки для отображения на форме.

if ( $this -> form_validation -> run() === FALSE )
{
    //$this -> load -> vars( $data );
    $this -> load -> view( 'form_view' );   

}

Все работает нормально.Но теперь, поскольку тот же form_view загружен из функции user/process, URL-адрес формы изменится с:

root/user/signup

на

root/user/process 

Поскольку форма была отправленана URL user/process и form_view вызывается из process().Можно ли каким-то образом перенаправить или сохранить исходный URL-адрес формы (root/user/signup), когда form_view загружается из функции процесса в случае ошибок?

Спасибо.

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Используя тот же метод для проверки и проверки, вы можете попробовать что-то вроде

if( count($this->input->post()) > 0 ) 
{ // do validation
   if ($this->form_validation->run())
   {
       // initilize and    
       redirect('logged');
   }
}
$this->load->view( 'form_view' );

вы всегда получаете один и тот же метод, как вы просили

1 голос
/ 18 июля 2011

Я сделал это по-другому. У меня фактически есть один контроллер, чтобы сделать все это.

if ( $this -> form_validation -> run() === TRUE )
{
    code
    code
    redirect('ANOTHER_URL_WITH_VALIDATION_CODE_DISPLAY');        
}

$this -> load -> view( 'form_view' ); 

Извините, я хотел сказать, что один контроллер НЕ один метод. Если вы просто ищете подтверждение формы, то выбросьте все это в один контроллер. Пусть встроенная в CI функция form_validation выполнит проверку за вас. Если вам требуется проверка бэкэнда (то есть проверка имени пользователя), вы можете создать собственное правило проверки, называемое « callback », и также иметь форму для проверки.

В идеале ваш контроллер должен проверять все поля, если он проходит, он должен перенаправлять на следующую страницу с любой информацией, которую вы хотите отобразить (например, «Спасибо за регистрацию!») Если проверка не пройдена, она должна снова загрузить страницу просмотра; вам, очевидно, придется заполнить поля.

0 голосов
/ 18 июля 2011

Смотрите мой ответ здесь для подробного объяснения того, как / почему должна вызываться проверка формы Codeigniter:

Вопрос о том, как должны работать перенаправления

...