We've suffered through various forms of custom validation and ad hoc is not the way you want to live. I've also recently started using Data::FormValidator and I think it's great. Here's why:
- It's fairly mature. It's been around long enough that many features are there and they've encountered and solved enough problems;
- I found the interface very clear and clean-cut, yet flexible in the right parts. You can play with the profile as much as you want before you check your data. You can also play with the data hash you pass. We seldom just pass the param hash. We usually tweak it first, and DFV doesn't care.
- It clearly differentiates between filters and constraints. Filters let you reasonably massage data (i.e., remove a dash from a phone number) to be nice to your users. If the simple filters don't clean it up enough, the constraint fires errors.
- You can easily define your own filters and constraints on your system in custom constraint modules.
- You get plenty of info back on failed constraints so you can form an appropriate response for the user.
- It standardizes your validation. You are using a standard module rather than ad hoc code. Plus it prevents you from stuffing other things into your validation steps.
It's simple to start using it, and so far we haven't expanded beyond its capabilities. It can even handle complex inter-form dependencies in the constraint model. So far, it gets two thumbs up from me.