Как отправить форму после метода для того же get-url в другой функции в CodeIgniter? - PullRequest
5 голосов
/ 17 февраля 2012

Я нашел проверку формы CodeIgniter для отображения сообщения об ошибке с помощью метода load-> view, и при использовании «redirect» будет потеряно сообщение об ошибке поля.

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

class Users extends CI_Controller {
  function __construct() {
      parent::__construct();
  }

  public function sign_up()
  {
    $this->load->view('users/sign_up');
  }

public function do_sign_up(){
      $this->form_validation->set_rules('user_login', 'User Name', 'trim|required|is_unique[users.login]');
      $this->form_validation->set_rules('user_email', 'Email', 'trim|required|valid_email|is_unique[users.email]');

      if ($this->form_validation->run() == FALSE) {
          $this->load->view('users/sign_up');
      }else {
       // save post user data to users table
       redirect_to("users/sign_in");
}


Когда проверка формы не удалась, URL в браузере изменится на "/ users / do_sign_up", я хочу сохранить тот же URL на странице sign_up.

Использовать перенаправление(«users / sign_up») метод при проверке формы не удастся сохранить тот же URL, но сообщение об ошибке проверки будет потеряно.

в Rails, я не могу использовать маршруты для настройки следующим образом:

get "users/sign_up"       => "users#signup"
post "users/sign_up"       => "users#do_signup"

Ответы [ 2 ]

5 голосов
/ 18 февраля 2012

imho, нет необходимости проверять метод запроса, потому что, если пользователь «ПОЛУЧИТ» на странице, вы хотите показать представление регистрации ... если он использует «POST» на странице и не проходит проверку, вы также хотите показать представление регистрации. Вы не захотите показывать представление регистрации, когда пользователь «POST» на страницу и проходит проверку.

imho, вот самый элегантный способ сделать это в CodeIgniter:

public function sign_up()
{
    // Setup form validation
    $this->form_validation->set_rules(array(
        //...do stuff...
    ));

    // Run form validation
    if ($this->form_validation->run()) 
    {
        //...do stuff...
        redirect('');
    }

    // Load view
    $this->load->view('sign_up');
}

Кстати, это то, что я делаю внутри моего config / rout.php, чтобы мой CI стал похожим на RoR. Помните, что ваш route.php - это обычный php-файл, поэтому вы можете установить переключатель для генерации разных маршрутов в зависимости от метода запроса.

switch ($_SERVER['REQUEST_METHOD'])
{
    case 'GET':
        $route['users/sign_up'] = "users/signup";
    break;
    case 'POST':
        $route['users/sign_up'] = "users/do_signup";
    break;
}
0 голосов
/ 10 декабря 2016
<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_filter/<?php echo$device_id;?>"><i class="fa fa-bar-chart"></i></button>
<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_data/<?php echo$device_id;?>"><i class="fa  fa-th-list"></i></button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...