An easy to use Validator for Vue components and any kind of objects based on Laravel Validation.
- Works within components
- Works within methods
- Works within mixins
$ npm install --save vue-simple-validatorimport VueSimpleValidator from 'vue-simple-validator';
// Register Plugin
Vue.use(VueSimpleValidator, {
// Use to overwrite the current errorMessage (or translate)
errorMessage: {
required: '{field} really, like really needs to be filled in dude.'
}
});The basic usage within a component is to call the validator with input this as the data context and this.rules as second parameter. The validate() method returns a boolean and to retrieve the errors you can retrieve them with the errors() method.
export default {
name: 'ExampleComponent',
data() {
return {
name: 'John Doe',
age: 0,
email: '',
errors: null,
rules: {
name: 'required|string|min:3',
age: 'required|integer|between:18,99',
email: 'required|email',
}
};
},
methods: {
submit() {
if (!this.$validator.validate(this, this.rules)) {
this.errors = this.$validator.errors();
return;
}
// Execute the rest of the code..
},
}
};The rules can also be declared in the method itself:
submit() {
let rules = {
name: 'required|string|min:3',
age: 'required|integer|between:18,99',
email: 'required|email',
};
if (!this.$validator.validate(this, rules)) {
this.errors = this.$validator.errors();
return;
}
// Execute the rest of the code..
}You can also validate custom datasets, see the params variable in the example below:
submit(params) {
let rules = {
name: 'required|string|min:3',
age: 'required|integer|between:18,99',
email: 'required|email',
};
if (!this.$validator.validate(params, rules)) {
this.errors = this.$validator.errors();
return;
}
// Execute the rest of the code..
}The validator can be accessed globally throughout Vue just by calling the this.$validator or this.$root.$validator.
mixinMethod(name, age, email) {
let rules = {
name: 'required|string|min:3',
age: 'required|integer|between:18,99',
email: 'required|email',
};
let data = {
name: name,
age: age,
email: email
};
if (!this.$validator.validate(data, rules)) {
this.$root.errors = this.$validator.errors();
return;
}
// Execute the rest of the code..
}All public methods for the Validator class:
| Method | Return | Description |
|---|---|---|
$validator.validate(Object data, Object rules); |
Boolean |
Validates the given data against the given rules. |
$validator.errors(); |
ErrorBag |
Returns the Errorbag of the last validation, for more info about the ErrorBag see methods below. |
$validator.failed(); |
Boolean |
Returns if is the last validation has failed or not. |
$validator.registerRule(String ruleName, Rule rule, String errorMessage); |
void |
You can register the own custom Rule, for more info see section Custom Rule. |
$validator.setErrorMessages(Object errorMessages); |
void |
Here you can add custom / new error messages specified as an associative array (object) |
All public methods for the ErrorBag class:
| Method | Return | Description |
|---|---|---|
errorBag.add(String key, String message); |
void |
Lets you add a custom error for the given key. |
errorBag.all(); |
Object |
Returns all the errors in the error bag as an associative array (object). |
errorBag.any(); |
Boolean |
Returns if the error bag contains any errors. |
errorBag.count(); |
Number |
Returns the number of errors in the error bag. |
errorBag.get(String key); |
`String | null` |
errorBag.has(String key); |
Boolean |
Checks if a certain key is found within the known errors in the error bag. |
The current rules which the plugin starts of with. More rules are being implemented soon.
| Rule | Description |
|---|---|
| alpha | Checks wether the value contains only alphabetically charachters. |
| alpha_numeric | Checks wether the value contains only alphanumeric charachters. |
| between:{min},{max} | Checks wether the value is between a {min} / {max}. |
| decimal / float | Checks wether the value is a decimal / float. |
| Checks wether the value is a valid email address. | |
| int / integer | Checks wether the value is an integer. |
| len:{length} / length:{length} | Checks wether the value has a certain length of {length}. |
| min:{min} | Checks wether the value has a minimal value of {min}. |
| max:{max} | Checks wether the value has a maximal value of {max}. |
| numeric | Checks wether the value is a valid number. |
| required | Checks wether the value is given. |
| required_if:{other_field} | Checks wether the value is given, when the {other_field} is given. |
| required_without:{other_field} | Checks wether the value is given, when the {other_field} is NOT given. |
| slug | Checks wether the value is a valid slug (example: lower-case-slug). |
| string | Checks wether the value is a valid string. |
| url | Checks wether the value is a valid url. |
You can also define custom rules and add them to the validator.
The rule class should extend the Abstract Rule class.
import Rule from './rule';
export default class Contains extends Rule {
/**
* @param {*} value
* @param {Array} ruleParams
* @param {Object} context
*
* @returns {Boolean}
*/
validate(value, ruleParams, context) {
// You can extract the params from the given rule (rulename:params,comma,separated)
const needle = ruleParams[0]; // Will return the first param
// Do you validation check and return if it validates true or false.
return value.indexOf(needle) !== -1;
}
/**
* @param {String} message
* @param {String} field
* @param {Array} ruleParams
*/
failureMessage(message, field, ruleParams) {
const needle = ruleParams[0];
// In some cases the failureMessage should contain more info.
// With this method you can inject the info into the message.
// The {field} replacement is highly recommended.
return message
.replace('{field}', field)
.replace('{needle}', needle);
}
};Your rule should be registered in the main Validator so the validator knows it can be used.
import VueSimpleValidator from 'vue-simple-validator';
import Contains from `./path-to-your-rules/contains';
// Register Plugin
Vue.use(VueSimpleValidator, { errorMessage: { .. }} });
// Add custom rule(s)
this.$root.$validator.registerRule('contains', new Contains(), '{field} must contains the value {needle}.');