Examples

Real-world code samples for WPZylos Validation.

User Registration

class UserRegistrationValidator
{
    public function validate(array $data): array
    {
        $validator = new Validator($data, [
            'username' => ['required', 'string', 'min:3', 'max:50', 'alpha_dash'],
            'email' => ['required', 'email'],
            'password' => ['required', 'min:8', 'confirmed'],
            'terms' => ['accepted'],
        ], [
            'username.required' => 'Please choose a username.',
            'username.min' => 'Username must be at least 3 characters.',
            'email.email' => 'Please enter a valid email address.',
            'password.min' => 'Password must be at least 8 characters.',
            'password.confirmed' => 'Passwords do not match.',
            'terms.accepted' => 'You must accept the terms of service.',
        ]);

        if ($validator->fails()) {
            throw new ValidationException($validator->errors());
        }

        return $validator->validated();
    }
}

Settings Form

class SettingsValidator
{
    public function validate(array $data): array
    {
        $validator = new Validator($data, [
            'site_name' => ['required', 'string', 'max:100'],
            'admin_email' => ['required', 'email'],
            'posts_per_page' => ['required', 'integer', 'min:1', 'max:100'],
            'timezone' => ['required', 'in:UTC,America/New_York,Europe/London'],
            'enable_comments' => ['boolean'],
            'logo_url' => ['nullable', 'url'],
        ]);

        if ($validator->fails()) {
            return [
                'success' => false,
                'errors' => $validator->errors()->toArray(),
            ];
        }

        return [
            'success' => true,
            'data' => $validator->validated(),
        ];
    }
}

Product Form

class ProductValidator
{
    public function rules(): array
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'sku' => ['required', 'alpha_dash', 'max:50'],
            'price' => ['required', 'numeric', 'min:0'],
            'sale_price' => ['nullable', 'numeric', 'min:0'],
            'stock' => ['required', 'integer', 'min:0'],
            'category_id' => ['required', 'integer'],
            'description' => ['nullable', 'string', 'max:5000'],
            'tags' => ['nullable', 'array'],
            'tags.*' => ['string', 'max:50'],
            'images' => ['nullable', 'array', 'max:10'],
            'images.*' => ['url'],
        ];
    }

    public function validate(array $data): array
    {
        $validator = new Validator($data, $this->rules());

        // Custom validation
        if (!empty($data['sale_price']) && $data['sale_price'] >= $data['price']) {
            $validator->errors()->add('sale_price', 'Sale price must be less than regular price.');
        }

        if ($validator->fails()) {
            throw new ValidationException($validator->errors());
        }

        return $validator->validated();
    }
}

API Request Validation

class ApiRequestValidator
{
    public function validateCreateOrder(array $data): array
    {
        return $this->validate($data, [
            'customer_id' => ['required', 'integer'],
            'items' => ['required', 'array', 'min:1'],
            'items.*.product_id' => ['required', 'integer'],
            'items.*.quantity' => ['required', 'integer', 'min:1'],
            'shipping_address' => ['required', 'array'],
            'shipping_address.street' => ['required', 'string'],
            'shipping_address.city' => ['required', 'string'],
            'shipping_address.zip' => ['required', 'string'],
            'shipping_address.country' => ['required', 'string', 'size:2'],
            'notes' => ['nullable', 'string', 'max:1000'],
        ]);
    }
}