【问题标题】:Calling custom helper or library function in set_rules()在 set_rules() 中调用自定义助手或库函数
【发布时间】:2011-07-25 14:43:55
【问题描述】:

我正在尝试在 set_rules(...) 行中调用自定义库的方法。

我听说可以创建一个类(在应用程序/库中)扩展原生 Form_validation 类并在那里编写自定义方法。

所以我有 /application/libraries/MY_Form_validation.php 和以下代码;

class MY_Form_validation extends CI_Form_validation {

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

    function test_my_method($str)
    {

   //echo "test"; exit;
            if ( ! is_array($str))
        {
            return (trim($str) == '') ? FALSE : TRUE;
        }
        else
        {
            return ( ! empty($str));
        }
    } 

}

并且在我拥有的控制器功能中;

...
public function login() {                
        $this->load->library('form_validation');

        //echo ($this->form_validation->test_my_method(''))? "true":"false";      

        $this->form_validation->set_rules('username', 'Username', 'trim|test_my_method');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if($this->form_validation->run())
        { echo "Success"; }
}
...

在 set_rules() 行中调用该函数 ( test_my_method ) 时无法访问。知道有什么问题吗? 谢谢。

【问题讨论】:

  • 您在运行此代码时是否收到错误消息?如果是这样呢?
  • 好的,这就是我所缺少的,我在没有传递参数的情况下调用函数:一直保持用户名字段为空。但即使函数未定义为接受参数,如果字段为空,则不会调用该函数(请参阅下面示例中注释的 set_rules 行)。所以我不得不将它与“必需”一起使用。
  • 在自定义库中... function unique_username() { //echo "test"; $obj = &get_instance(); $obj->load->model('users_model'); $result = $obj->users_model->get_user_by_username( $obj->input->post('username') );如果 ($result->num_rows() > 0) 返回 false;否则返回真; } ...
  • 在控制器中... public function register() { $this->load->library('form_validation'); //$this->form_validation->set_rules('username', 'Username', 'trim|unique_username'); $this->form_validation->set_rules('username', 'Username', 'trim|required|unique_username'); $this->form_validation->set_message('unique_username', '%s 已被占用。'); $this->form_validation->set_rules('password', 'Password', 'required|min_length[7]'); if($this->form_validation->run()) echo '保存数据'; } ...
  • 只需编辑您的问题并添加此代码,格式正确

标签: codeigniter custom-validators


【解决方案1】:

我没有看到您为什么不使用回调函数而是为您的任务扩展表单验证类的任何原因。有关详细信息,请参阅Callbacks: Your own Validation Functions。如果您需要以某种方式从其本机行为进行更改,则可以扩展该类,而不是为了这种任务。此外,如果您已经设置了一些自定义回调,则不需要包含其他规则(如修剪、必需等),因为您可以在自定义回调函数中检查该字段的所有方面。

【讨论】:

  • 这是一个非常主观的评论,人们可以利用这种行为以可移植的形式构建自己的一组更高级的验证函数,以便多次重复使用,而不是将回调复制到每个项目。
  • 好吧,如果你构建了一些通用功能,那就另当别论了。我指的是您上面的代码,它与“必需”规则完全相同,在这种情况下不需要扩展本机类。
  • 这是一个例子......你以为他真的在使用一个名为test_my_method的验证函数......???
猜你喜欢
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2017-08-28
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多