sourcetoad/rule-helper-for-laravel

Rule helper for Laravel

v5.1.0 2024-04-23 21:57 UTC

This package is auto-updated.

Last update: 2024-04-23 21:59:27 UTC


README

Adds helpers to make building Laravel rule arrays easier by providing helper methods for the built-in rules.

Installation

composer require sourcetoad/rule-helper-for-laravel

Usage

RuleSet

The RuleSet class provides a fluent interface for defining sets of rules.

Basic usage

use App\Rules\CustomRule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rules\Unique;
use Sourcetoad\RuleHelper\RuleSet;

class CreateBlogRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'title' => RuleSet::create()
                ->required()
                ->unique('posts', 'title', fn(Unique $rule) => $rule->withoutTrashed())
                ->rule(new CustomRule)
                ->max(255),
            'body' => RuleSet::create()
                ->required(),
        ];
    }
}

Rule

The Rule class provides the same methods as the Laravel \Illuminate\Validation\Rule class, with the rest of the built-in rules exposed via static methods.

Basic usage

use Illuminate\Foundation\Http\FormRequest;
use Sourcetoad\RuleHelper\Rule;

class CreateBlogRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'title' => [
                Rule::required(),
                Rule::unique('posts'),
                Rule::max(255),
            ],
            'body' => [
                Rule::required(),
            ],
        ];
    }
}

Additional helpers

Defined rule sets

The RuleSet class contains methods to define and reuse rule sets across the project.

To define a rule set call RuleSet::define in your app service provider's boot method.

    public function boot(): void
    {
        RuleSet::define('existing_email', RuleSet::create()->email()->exists('users'));
    }

The defined set can then be used in rules using RuleSet::useDefined.

    public function rules(): array
    {
        return [
            'to' => RuleSet::useDefined('existing_email')->required(),
            'bcc' => RuleSet::useDefined('existing_email'),
        ];
    }

To concatenate a defined rule set you can call concatDefined with the rule set's name.

RuleSet::create()->required()->concatDefined('existing_email');

requiredIfAll

Accepts multiple RequiredIf rules and only marks as required if all return true.

requiredIfAny

Accepts multiple RequiredIf rules and marks as required if any return true.