views:

33

answers:

1

I have an application that allows users to create forms and assign validation to each field (think http://www.phpform.org/ or http://wufoo.com/). I can easily get each field’s name and label from the database, as well as the array of associated validation rules.

Say, for example, I wanted to apply a blanket rule of “required” for all of the user defined forms, I would do something like this:

foreach($fields as $field)
{
    $this->form_validation->set_rules($field[‘name’], $field[‘label’], ‘required’);
} 

Now, the problem is that I need to replace “required” with a callback. In order for the callback to work, I’m going to need the field’s id (so the callback can use this id to lookup the field's associated validation rules). How do I get this id value to the callback function?

+3  A: 
foreach($fields as $field)
{       
     $this->form_validation->set_rules($field[‘name’], $field[‘label’], "callback__example[$field[‘id‘]]");
}

// your callback... see ~line 589 of Form_validation library  
public function _example($str,$id)
{
  // do something to $str using $id, return bool
}
Natebot
Thanks, this worked for me!
StackOverflowNewbie
As an aside, CI expects validation callbacks to be public methods of the controller - which means they are unfortunately addressable via url. To prevent this you can use the underscore prefix to the function name. So the callback method is '_mycallback' and it is addressed in the validation rules with the 'callback_' prefix, so there is a double underscore: 'callback__mycallback'
Natebot