Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Rule Helper For Laravel Laravel Package

sourcetoad/rule-helper-for-laravel

Fluent helpers for building Laravel validation rules. Use RuleSet to chain required/unique/max and add custom rules, or Rule for static rule builders. Supports reusable defined rule sets and extras like requiredIfAll/requiredIfAny for complex conditions.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require sourcetoad/rule-helper-for-laravel
    

    Publish the config (if needed):

    php artisan vendor:publish --provider="SourceToad\RuleHelper\RuleHelperServiceProvider"
    
  2. First Use Case Define a custom rule in app/Rules/CustomRule.php:

    use SourceToad\RuleHelper\Rules\BaseRule;
    
    class CustomRule extends BaseRule
    {
        public function passes($attribute, $value)
        {
            return $value === 'expected';
        }
    }
    

    Use it in a Form Request:

    use App\Rules\CustomRule;
    
    public function rules()
    {
        return [
            'field_name' => ['required', new CustomRule],
        ];
    }
    
  3. Key Files to Review

    • config/rule-helper.php (for global settings)
    • app/Rules/ (custom rule storage)
    • vendor/sourcetoad/rule-helper-for-laravel/src/ (core logic)

Implementation Patterns

Common Workflows

  1. Reusable Rule Creation Extend BaseRule for shared validation logic:

    class EmailDomainRule extends BaseRule
    {
        protected $domain;
    
        public function __construct($domain)
        {
            $this->domain = $domain;
        }
    
        public function passes($attribute, $value)
        {
            return str_ends_with($value, "@{$this->domain}");
        }
    }
    

    Usage:

    'email' => [new EmailDomainRule('example.com')]
    
  2. Rule Chaining Combine rules with RuleHelper::combine():

    use SourceToad\RuleHelper\Facades\RuleHelper;
    
    $rule = RuleHelper::combine([
        'min:5',
        'max:20',
        new CustomRule,
    ]);
    
  3. Dynamic Rule Generation Use RuleHelper::make() for runtime rules:

    $rule = RuleHelper::make(function ($value, $attribute) {
        return $value === request('confirm_' . $attribute);
    });
    
  4. Integration with Laravel Pipelines Pass rules through pipelines for pre/post-processing:

    $value = $request->input('field')
        ->through(fn ($value) => strtolower($value))
        ->then(new CustomRule)
        ->passes();
    
  5. API Resource Validation Attach rules to API resources:

    use SourceToad\RuleHelper\Traits\ValidatesRules;
    
    class UserResource extends JsonResource
    {
        use ValidatesRules;
    
        public function toArray($request)
        {
            $this->validateRules($request, [
                'name' => [new CustomRule],
            ]);
            return parent::toArray($request);
        }
    }
    

Gotchas and Tips

Pitfalls

  1. Caching Rules

    • Custom rules are not cached by default. For performance, manually cache rule instances:
      $rule = Cache::remember("rule_{$key}", now()->addHours(1), fn() => new CustomRule);
      
  2. Attribute Name Confusion

    • The $attribute parameter in passes() may not match the input key if using sometimes or nested arrays. Debug with:
      dd($attribute, $value, $this->getAttributeName());
      
  3. Locale-Specific Rules

    • Rules like date_format rely on PHP’s locale settings. Set explicitly:
      setlocale(LC_TIME, 'en_US.UTF-8');
      
  4. Dependency Injection

    • Avoid circular dependencies when injecting services into rules. Use lazy resolution:
      public function passes($attribute, $value)
      {
          return app(MyService::class)->check($value);
      }
      
  5. Testing Quirks

    • Mock rules in tests by extending BaseRule and overriding methods:
      $mockRule = Mockery::mock(CustomRule::class)->makePartial();
      $mockRule->shouldReceive('passes')->andReturn(true);
      

Tips

  1. Rule Organization Group related rules in namespaces (e.g., App\Rules\Auth, App\Rules\Payment).

  2. Error Message Customization Override message() in BaseRule:

    public function message()
    {
        return 'The :attribute must be a valid :rule.';
    }
    
  3. Conditional Rules Use RuleHelper::when() for context-aware rules:

    $rule = RuleHelper::when(
        fn() => auth()->check(),
        fn() => new AdminOnlyRule
    );
    
  4. Performance For heavy rules, implement shouldSkipValidation() to bypass checks when possible:

    public function shouldSkipValidation()
    {
        return $this->attribute === 'cached_field';
    }
    
  5. Debugging Enable verbose rule logging in config/rule-helper.php:

    'debug' => env('APP_DEBUG', false),
    

    Logs will appear in storage/logs/rule-helper.log.

  6. Extending Core Rules Override Laravel’s built-in rules by publishing the package’s config and modifying:

    'extensions' => [
        'custom' => \App\Rules\CustomRule::class,
    ],
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky