2012-02-06 35 views
8

Tôi đã đặt tệp lớp này có tên 'My_Form_validation.php' vào 'application/core' và tôi cũng đã thử đặt nó trong 'application/libraries'.Mở rộng xác nhận biểu mẫu trong Codeigniter

Trong điều khiển của tôi Tôi đang sử dụng

$this->form_validation->set_rules('user_postcode', 'Postcode', 'valid_postcode|trim|required|xss_clean'); 

Đây là whats trong My_Form_validation.php - logic thực tế không phải là trong câu hỏi ở đây vì tôi có một vài tùy chọn để thực sự xác nhận mã bưu điện. Những gì tôi cần giúp đỡ là hiểu tại sao nó không tải hoặc được gọi!

Phiên bản CI của tôi là xác định ('CI_VERSION', '2.0.2');

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

/** 
* Form validation for UK Postcodes 
* 
* Check that its a valid postcode 
* @author James Mills <[email protected]> 
* @version 1.0 
* @package FriendsSavingMoney 
*/ 

class MY_Form_validation extends CI_Form_validation 
{ 

    function __construct() 
    { 
     parent::__construct(); 
     log_message('debug', '*** Hello from MY_Form_validation ***'); 
    } 

    function valid_postcode($postcode) 
    { 

     /** 
     * 
     * UK Postcode validation expression from Wikipedia 
     * http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom 
     * 
     * Note: Remember to strtoupper() your postcode before inserting into database! 
     * 
     */ 

     $pattern = "/^(GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|((E|N|NW|SE|SW|W)1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|(SW|W)([2-9]|[1-9][0-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]{2})$/"; 


     if (preg_match($pattern, strtoupper($postcode))) 
    { 
      return TRUE; 
     } 
     else 
     { 
      $this->set_message('valid_postcode', 'Please enter a valid postcode'); 
      return FALSE; 
     } 
    } 
} 
+2

Sanity checks: 1) tệp là 'application/libraries/MY_Form_validation.php', 2)' $ config ['subclass_prefix '] =' MY _ '; ', 3) Ngưỡng cấu hình của bạn sẽ xuất ra thông báo gỡ lỗi của bạn (và quyền truy cập tệp cho phép nó) – landons

+0

Có với mọi thứ ... –

+0

Không có đầu mối. Tôi sẽ phải shotgun gỡ lỗi nó với tất cả các loại 'var_dump()' và 'die()' cuộc gọi ... – landons

Trả lời

17

Bởi vì bạn đang mở rộng thư viện CodeIgniter và không phải là một thành phần cốt lõi, bạn muốn đặt rằng trong application/libraries (không application/core).

Và tất nhiên, đừng quên tải thư viện Form_validation vào trong mã bộ điều khiển của bạn.

$this->load->library('form_validation'); 

Những điều khác để kiểm tra:

  • trường hợp Tên tập tin nhạy cảm (MY_Form_validation.php tải trong khi My_Form_validation.php sẽ không)
  • tên lớp trường hợp nhạy cảm (lớp MY_Form_validation kéo dài CI_Form_validation)

Reference tài liệu:

+0

Tôi đã thử tất cả các loại viết hoa khác nhau trong tệp 'MY_Form_validation' và tên tệp nhưng không có tệp nào trong số chúng hoạt động. Có thể có sự thay đổi tùy thuộc vào phiên bản CI đang sử dụng không? –

+2

@timpeterson: Tôi đã làm điều tương tự. Bạn có thể tìm ra giải pháp cho điều này không? – user1149244

+0

Tôi đã có những cơn ác mộng vô tận cố gắng để có được điều này để hoạt động đúng. Tệp và lớp của tôi được đặt tên là 'My_form_validation' thay vì' MY_Form_validation'. Tôi đang đá bản thân mình bây giờ –

11

Bạn phải thêm $ quy định về phương pháp __construct của bạn và cũng chuyển thông tin này đến constructor mẹ

ví dụ:

function __construct($rules = array()) 
{ 
    parent::__construct($rules); 
} 

Nhìn vào Form_validation và cung cấp các biến tương tự.

+0

ialbescu, FTW. Điều này không chỉ có ý nghĩa, nó cũng hoạt động. Tôi không thể tin rằng tôi bỏ qua đi qua các mảng quy tắc. Thực hiện tốt. +1 – Abinadi

2

Tôi biết điều này là cũ, nhưng chỉ trong trường hợp người khác tình cờ gặp điều này trong ngày hiện đại như tôi đã làm, đây là một ví dụ nhanh. (Hiện đang sử dụng 3.0.6, nhưng tôi tin rằng điều này cũng sẽ hoạt động trên cả 2.)

class MY_Form_validation extends CI_Form_validation { // Capitalization matters 

    protected $CI; 

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

    /** 
    * Valid Date 
    * 
    * Verify that the date value provided can be converted to a valid unix timestamp 
    * 
    * @param string $str 
    * @return bool 
    */ 

    public function valid_date($str) { 
     $CI = $this->CI =& get_instance(); // Get your CodeIgniter instance 

     if (($str = strtotime($str)) === FALSE) { // Basic timestamp check 
      // Set error message by calling the method through the CI instance. 
      // Obviously must be done BEFORE returning any value 
      $this->CI->form_validation->set_message('valid_date', '{field} must be a valid date.'); 
      return FALSE; 
     } 

     return TRUE; 
    } 
} 
+1

'$ CI-> form_validation == $ this' fyi. Không cần phải lấy ví dụ. –

Các vấn đề liên quan