Can you set form values at the validation() step?

Can you set form values at the validation() step?

by David Poly -
Number of replies: 2

I'm trying to set data in a hidden mod_form input from validation() but even though I can see that the value has been set if I check the input value afterward, once I get to add_instance() in lib.php the hidden input value is gone.

The reason I want to set this value from validation is that I'm doing a series of validations and requests to validate that a Youtube video ID is valid. If it is, I calculate the video's aspect ratio from the YT API response I got.

sot it looks a bit like...

function validation($data, $files) {
    ...
    if(yt) {
        $input = $mform->getElement("aspect_ratio[$i]");
        $input->setValue($aspectratio);
    }
}

Assuming everything else validates, the data passed to add_instance() has an empty value for this element. All the other data is there.

Is there a way to do this the way I'm trying to do it or do I need to replicate that logic but from definition_after_data() instead? To me it feels illogical to try and calculate this aspect ratio on any user entered data without first validating it's an actual valid Youtube video with a valid response from the Youtube API.

I guess I could also do it from add_instance but that means querying the YT API once more to get the exact same data I just pulled from the validation.

Thanks for any help Moodle community!

Average of ratings: -
In reply to David Poly

Re: Can you set form values at the validation() step?

by Tim Hunt -
Picture of Core developers Picture of Documentation writers Picture of Particularly helpful Moodlers Picture of Peer reviewers Picture of Plugin developers

To get data out of the validation process, don't try to save it into a hidden form field. Just save it as $this->computeraspectratio (or something), and add a $this->get_computed_aspect_ratio method (or something similar). (Or, you could override get_data() to include the extra computed values.)

In reply to Tim Hunt

Re: Can you set form values at the validation() step?

by David Poly -
You're right that worked. I ended up using data_postprocessing() which works just like get_data().


Thanks for your help Tim.


David