2012-02-17 49 views
2

我試圖將驗證規則從控制器移動到配置文件中。我按照文件here的說明,但我無法讓它工作。提交表單時,驗證不會執行。回聲validation_errors()什麼都不打印。將驗證規則保存到配置文件的問題

做一個小挖之後,在表單驗證庫run()方法返回因爲有沒有設定的配置規則。下面是摘錄:

系統/庫/ Form_validation.php:

// No validation rules? We're done... 
if (count($this->_config_rules) == 0) 
{ 
    return FALSE; 
} 

任何幫助,將不勝感激。這裏是我的代碼:

應用/控制器/ signup.php:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Signup extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function index() { 
     if ($this->form_validation->run()) { 
      $this->user_model->insert(array(
       'email_address' => $this->input->post('email_address'), 
       'password' => $this->input->post('password'), 
      )); 

      redirect('/log-in'); 
     } 

     $this->load->view('header'); 
     $this->load->view('signup/index'); 
     $this->load->view('footer'); 
    } 

} 

/* End of file signup.php */ 
/* Location: ./application/controllers/signup.php */ 

的application/config/form_validation.php:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

$config = array(
    'signup/index' => array(
     array(
      'field' => 'email_address', 
      'label' => 'Email Address', 
      'rules' => 'trim|required|max_length[255]|valid_email|email_in_use' 
     ), 
     array(
      'field' => 'password', 
      'label' => 'Password', 
      'rules' => 'required|min_length[6]' 
     ), 
     array(
      'field' => 'confirm_password', 
      'label' => 'Confirm Password', 
      'rules' => 'required|matches[password]' 
     ), 
    ), 
); 

/* End of file form_validation.php */ 
/* Location: ./application/config/form_validation.php */ 

我使用CI 2.1.0 。

+0

我得到了相同的親......這是一bug? – zhkzyth 2014-08-20 17:28:33

+0

它看起來像有人面臨相同的專業人士如您可以找到一些解決方案在這[鏈接](http://stackoverflow.com/questions/14179936/custom-config-file-not-working-withform -validation?rq = 1) – zhkzyth 2014-08-20 17:35:49

回答

0

您需要在run方法中傳遞您的config var。閱讀您發佈的鏈接中名爲「調用特定規則組」的部分。

+1

該文檔指出:「當規則組的名稱與控制器類/函數完全相同時,它將在從該類/函數調用run()'函數時自動使用。」我不應該不必將配置鍵傳遞給'run()'方法,儘管當我這樣做時它仍然不起作用。 – birderic 2012-02-18 00:59:38

+0

嗯有趣.. – Catfish 2012-02-18 18:39:25

0

也許這是你身邊的錯字,但配置應該存儲在application/config/form_validation.php(而不是你在帖子中寫的「application/controllers/signup.php」)裏面。 這種方式應該自動調用。

擴展在什麼@Catfish說,你可以:

  1. 不要創建一套不同的規則(如果你只需要一個),以及您的array'll樣子:

    $config = array(
          array(
           'field' => 'username', 
           'label' => 'Username', 
           'rules' => 'required' 
          ), 
          array(
    
  2. 創建不同的規則集,它遵循您使用的結構;但在這種情況下,您需要傳遞給run()方法其中規則要使用。所以,你的情況,應該是

    if($this->form->validation->run('signup/index')) 
    
+0

我將需要多套規則,但如果只有一套規則仍然不起作用。而且,將規則傳遞給'run()'方法會導致相同的行爲。 – birderic 2012-02-18 01:03:43

0

一些東西......

你有沒有在config/autoload.php加載form_validation庫?因爲我沒有看到它被加載到你的控制器中。如果你想在你的控制器中加載它,使用$this->load->library('form_validation')

我看到一個電子郵件字段的規則,名爲email_in_use,這個規則存儲在哪裏?如果您要創建自定義規則,請確保它位於libraries/MY_Form_validation.php

我從來沒有使用控制器/函數方法,它一直爲我工作。我會使用類似$this->form_validation->run('login');這樣的東西。

您可以確認驗證run()調用是否正在評估爲真或假?您的網頁是否重定向到登錄? (順便說一句:?我不認爲你需要的/在重定向呼叫

最後,你有PHP錯誤打開爲E_ALL檢查php.ini