I want to make a class in OOP PHP to validate forms. However, I’ve having trouble structuring this.
Initially I thought of creating individual functions for each type of validation (check length of submitted data, check whether it’s a number or not, etc), then another function to check whether data passed the validation tests and pass errors into an array.
I’m getting stuck though as my code is becoming very long and difficult to manage- I’m pretty new, so how would you approach this problem?
I want to make a class in OOP PHP to validate forms. However, I’ve
Share
As i was reading through your post, a question came into my mind about what you write:
Why, instead of validating a form, dont you validte your model’s objects?
I mean, in an OOP way of looking things your model´s object (or domain objects) are the ones who knows what data is valid or not for each of their attributes.
Not doint that, and pushing that logic into the UI makes your design fragile, UI dependant and harder to maintain. If you add a new attribute to one of your model’s object, you’ll have to modify the form validator as well.
If you go with Objects Validation, the idea is that an object cannot be created in an invalid state. If you try to modify it with invalid data, an exception will be thrown.
This makes easy to work with forms. The only think you have to do is populate your objects and watch for exceptions thrown in that process.
This is only an idea to get you started and see another way of solving this problem.
Regarding your question about Forms Validation, as the other guys said, it is always better not to reinvent the wheel and go for an existing, proven, validation framework.
However, if you are curious about it, here is one of the many ways you can do it:
Let’s go through the things you need: you are talking about a form that needs to be validated with one or more validation functions. Then you talk about a function that tells you whether the form passed the validation or not, and as a result you got the list of errors found during the validation phase.
As you talk about OOP, the way to go is to give each concept or idea of your problem domain (the domain of form validation) entity via a class that represents it that model the behavior they have.
So, it is natural to think about a
FormValidatorclass with a list ofValidationRuleinstances, where each one colaborates in the validation process. This validation process is done by calling thevalidatefunction of theFormValidator. Also, eachValidationRulewill give, as result of calling it´s ownvalidatemethod an instance of theValidationRuleResultclass, that tells whether the validation was successful or not, along with an error message and additional data (if needed) about the validation. Once all the validation rules were evaluated, thevalidatemethod of theFormValidatorclass will return an instance ofValidationResultclass, that summarizes all the validation results of the rules evaluated providing the list of errors found.To get this down to earth, here is the sample model we’re talking about:
A sample implementation
Disclaimer: please bear in mind that, as any design, it may contains flaws. The following is intended to help you to solve your problem, not to be a complete solution.
You can create a validation rule this way:
Some things to note:
ValidationResultclass works only on those results that didn’t pass). Remember that this is a sample only for the purpose of helping you, is not a complete solution.Usage