我已将这个名为'My_Form_validation.php'的类文件放入'application / core'中,我也尝试将其放在'application / libraries'中。
在我的控制器中我正在使用
$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 <james@koodoocreative.co.uk>
* @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;
}
}
}
答案 0 :(得分:17)
因为您要扩展CodeIgniter库而不是核心组件,所以您希望将其放在application/libraries
(而不是application/core
)中。
当然,不要忘记在控制器代码中加载Form_validation
库。
$this->load->library('form_validation');
其他要检查的事项:
MY_Form_validation.php
加载而My_Form_validation.php
不会加载)MY_Form_validation
扩展CI_Form_validation
)参考资料:
答案 1 :(得分:11)
您必须在__construct方法上添加$规则,并将其传递给父构造函数
例如:
function __construct($rules = array())
{
parent::__construct($rules);
}
查看Form_validation并提供相同的变量。
答案 2 :(得分: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;
}
}