1

在 CI user_guide 之后,我创建了一个名为“form_validation.php”的配置文件,其中包含以下集合:

$config = array(
'user/create' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...        
),
'user/update' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...
)
);

在我的“用户”控制器中,当我调用“创建”方法时,因此使用 URLhttp://localhost/my_ci_application/user/create时,该语句会$this->form_validation->run()自动运行我的配置文件中定义的第一组规则。这是我在用户指南中阅读的预期行为。

但是当我运行以下 URLhttp://localhost/my_ci_application/user/update/1来更新 ID 为 1 的用户时,它不会自动加载“用户/更新”规则集。似乎因为参数的原因,CI 希望找到一个“用户/更新/1”规则集,我当然无法创建,因为我的用户 ID 在调用此方法时会一直变化。

我理解对了吗?如果是,那很遗憾,因为我认为标准 CI URL 的形成如下:控制器/方法/参数......所以我希望表单验证类只考虑前两个 URI 段?!

仅供参考,如果我在 user.update 方法中编写以下内容,我的验证规则可以正常工作:

$this->form_validation->run('user/update')

所以我的问题真的是我是否正确理解了规则的自动加载,以及我们是否可以做任何事情来自动加载这些规则,即使方法具有一些参数。

非常感谢你。

4

3 回答 3

1

在您的 form_validation.php 文件中:

$CI =& get_instance();

$config = array(
    'user/update/' . $CI->uri->segment(3) => array(
    ....
    )
);
于 2013-08-25T00:27:32.677 回答
0

如果我理解这个问题,您将需要通话验证,例如:

$this->lang->load('form_validation', 'portuguese'); //if u have order language
if($this->form_validation->run('user/update') == FALSE)
{
//msg error
}
else{
//save
}

要获得 url 销钉的值,您需要:

$this->uri->segment(3);

我希望这有帮助

于 2013-07-10T11:20:40.020 回答
0

您可以扩展库来实现这一点

application/libraries/MY_Form_validation.php

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

class MY_Form_validation extends CI_Form_validation {

    function run($group = '')
    {
        if($group == '')
        {
            $group = '/' . implode('/', array_slice($this->CI->uri->rsegment_array(), 0, 2));
        }

        return parent::run($group);
    }

}
于 2014-07-19T15:35:42.060 回答