sourcetoad / rule-helper-for-laravel
Rule helper for Laravel
Installs: 80 551
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 10
Forks: 0
Open Issues: 0
Requires
- php: ^8.2
- laravel/framework: ^11.23.2
Requires (Dev)
- ext-json: *
- larastan/larastan: ^2.0
- laravel/pint: 1.13.9
- orchestra/testbench: ^9.4
- phpunit/phpunit: ^10.5
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.