0

我正在使用带有 codeigniter 的模块化 MVC。我有一个模块播放列表,其中有一个管理控制器,并且我有一个私有 $rules 变量来设置表单验证规则。

我在同一个文件中同时具有创建和编辑功能,并验证了这两种形式(添加、编辑也是仅从一个文件 form.php 动态创建的)。

$this->load->library('form_validation');
$this->form_validation->set_rules($this->rules);
$this->form_validation->set_error_delimiters(' <p class="error">', '</p>');

这些用于创建和编辑功能。我不想在编辑模式下验证的一些字段。我是否需要为它们创建不同的私有规则,或者是否有更好的方法在 codeigniter 中处理这个问题,因为我是新手。我想删除对FILE 标记的验证,因为用户不需要在编辑模式下上传。

谢谢

4

1 回答 1

1

这是来自 CI 论坛的答案(原始链接)。

然后,您可以使用某种形式的 heirachy 定义创建/编辑规则;

<?php
$this->form_validation->set_group_rules('createModule');
$this->form_validation->set_group_rules('editModule');
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
?>

或者,你可以这样做;

<?php
// This will validate the 'accidentForm' first
$this->form_validation->set_group_rules('createModule');
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
// Now we add the 'locationForm' group of rules
$this->form_validation->set_group_rules('editModule');
// And now we validate *both* sets of rules (remember that the createModule rules are still
// there), but it doesn't necessarily matter, since it will simply redo the 'createModule'
// validation while also doing the 'editModule' validation
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
?>

下面是扩展 Form_validation 类的代码,保存在应用程序库文件夹中为 MY_Form_validation.php

<?php
class MY_Form_validation extends CI_Form_validation {

    /**
     * Set Rules from a Group
     *
     * The default CodeIgniter Form validation class doesn't allow you to
     * explicitely add rules based upon those stored in the config file. This
     * function allows you to do just that.
     *
     * @param string $group
     */
    public function set_group_rules($group = '') {
        // Is there a validation rule for the particular URI being accessed?
        $uri = ($group == '') ? trim($this->CI->uri->ruri_string(), '/') : $group;

        if ($uri != '' AND isset($this->_config_rules[$uri])) {
            $this->set_rules($this->_config_rules[$uri]);
            return true;
        }
        return false;
    }

}

?>
于 2012-06-20T14:02:12.390 回答