2012-02-06 8 views
8

Я поместил этот файл класса 'My_Form_validation.php' в 'application/core', и я также попытался поместить его в 'application/libraries'.Расширение проверки формы в Codeigniter

В мой контроллер я использую

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

Это, Что в My_Form_validation.php - фактическая логика не вопрос здесь, потому что у меня есть несколько вариантов на самом деле проверки почтового индекса. Мне нужна помощь в понимании того, почему она не загружается или не звонит!

Моя версия CI define ('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

здравомыслие проверки: 1) файл является 'приложения/библиотеки/MY_Form_validation.php', 2)' $ конфигурации [ 'subclass_prefix '] =' MY _ '; ', 3) Ваш порог журнала регистрации выводит ваше сообщение об отладке (и разрешает его разрешение) – landons

+0

Да ко всему ... –

+0

Нет подсказки. Мне пришлось бы отлаживать его с помощью всех видов 'var_dump()' и 'die()' звонков ... – landons

ответ

17

Поскольку вы расширяете библиотеку CodeIgniter, а не основной компонент, вы хотите поместить что в application/libraries (не application/core).

И, конечно же, не забудьте загрузить библиотеку Form_validation в код вашего контроллера.

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

Другие вещи, чтобы проверить:

  • Filename случае чувствительности (MY_Form_validation.php нагрузки в то время как My_Form_validation.php не будет)
  • имя класса чувствительности к регистру (класс MY_Form_validation расширяет CI_Form_validation)

Reference материал:

+0

Я пробовал все различные типы капитализации в файле и имени файла MY_Form_validation', но ни один из них не работал. Могут ли быть изменения в зависимости от версии используемого CI? –

+2

@timpeterson: Я сделал то же самое. Могли ли вы найти решение? – user1149244

+0

У меня были бесконечные кошмары, пытаясь заставить это работать правильно. Мой файл и класс были именованы 'My_form_validation' вместо' MY_Form_validation'. Я сейчас пинаю –

11

Вы должны добавить $ правила о способе __construct, а также передать это родительский конструктор

например:

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

Посмотрите на Form_validation и обеспечить одинаковые переменные.

+0

ialbescu, FTW. Это не только имеет смысл, но и работает. Не могу поверить, что я забыл пропустить массив правил. Красиво сделано. +1 – Abinadi

2

Я знаю, что это старо, но на всякий случай кто-то наткнется на это в современный день, как я, вот краткий пример. (В настоящее время, используя 3.0.6, но я считаю, что это будет работать на 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. Не нужно получать экземпляр. –

Смежные вопросы