2

我使用自定义验证回调使用 codeigniter 执行一些表单验证。

$this->form_validation->set_rules('testPost', 'test', 'callback_myTest');

如果返回值为 TRUE 或 FALSE,回调在模型中运行并按预期工作。但是文档还说您可以返回您选择的字符串。

例如,如果我有一个经过验证的日期,但是在同一个函数中,日期的格式发生了变化,我将如何在我的控制器中返回并检索这个新的格式化值?

感谢您阅读并感谢您的帮助。

4

5 回答 5

1

我不完全确定我得到了你的要求,但这是一个尝试。

您可以在构造函数中定义一个用作回调的函数,并在该函数中使用您的模型。像这样的东西:

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

class Controllername extends CI_Controller {

   private $processedValue;

   public function index()
   {
        $this->form_validation->set_rules('testpost','test','callback');

        if ($this->form_validation->run()) {
         //validation successful
         echo $this->processedValue; //outputs the value returned by the model
        } else {
         //validation failed
        }
   }

   private function callback($input)
   {
        $this->load->model('yourmodel');
        $return = $this->yourmodel->doStuff($input);

        //now you have the user's input in $input
        // and the returned value in $return

        //do some checks and return true/false

        $this->processedValue = $return;
   }

}
于 2012-05-16T22:59:30.677 回答
1
public function myTest($data){ // as the callback made by "callback_myTest"
     // Do your stuff here
    if(condition failed)
    {
        $this->form_validation->set_message('myTest', "Your string message");
        return false;
    } 
    else 
    {
       return true;
    }
}

请试试这个。

于 2014-08-14T11:40:32.623 回答
0

Tank_Auth 在控制器中执行此操作的方式是这样的

$this->form_validation->set_rules('login', 'Login', 'trim|required|xss_clean');

if ($this->form_validation->run()) {        
// validation ok

$this->form_validation->set_value('login')

}

使用 form_validation 的 set_value 方法没有记录,但我相信这是他们在修剪和清理登录后获取处理值的方式。

我真的不喜欢必须设置一个新变量来直接从自定义验证函数存储这个值的想法。

于 2013-09-26T00:52:26.387 回答
0

我查看了 codeigniter 的 Form_validation 文件中的函数 _execute。它将 var $_field_data 设置为回调获取的结果(如果结果不是布尔值)。还有另一个函数“set_value”。将它与作为字段名称的参数一起使用,例如 set_value('testPost') 并查看是否可以获得结果。

于 2012-05-16T22:49:14.483 回答
0

编辑:对不起,误解了这个问题。也许使用自定义回调。或使用 php $_POST 集合(跳过 codeigniter)...抱歉尚未测试,但我希望有人可以以此为基础...

例如:

function _is_startdate_first($str)
{
           $str= do something to $str;

            or 

            $_POST['myinput'} = do something to $str;

    }

=================

这就是我重命名自定义回调的方式:

$this->form_validation->set_message('_is_startdate_first', 'The start date must be first');

......

另外,这里是回调函数:

function _is_startdate_first($str)
{
    $startdate = new DateTime($this->input->post('startdate'), new DateTimeZone($this->tank_auth->timezone()));
    $enddate = new DateTime($this->input->post('enddate'), new DateTimeZone($this->tank_auth->timezone()));

    if ($startdate>$enddate) {
        return false;
        } else {
        return true;
        }
}
于 2013-10-28T12:25:29.723 回答