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

Sanitycheck Laravel Package

chameleon-system/sanitycheck

Laravel package for running sanity checks in Chameleon System projects. Provides a structured way to define checks, execute them via CLI, and report results to help catch misconfigurations and deployment issues early in development and operations.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require chameleon-system/sanitycheck
    

    Add the service provider to config/app.php:

    'providers' => [
        // ...
        ChameleonSystem\SanityCheck\SanityCheckServiceProvider::class,
    ],
    
  2. Publish Config (Optional)

    php artisan vendor:publish --provider="ChameleonSystem\SanityCheck\SanityCheckServiceProvider"
    

    Config file: config/sanitycheck.php.

  3. First Use Case: Basic Validation

    use ChameleonSystem\SanityCheck\Facades\SanityCheck;
    
    $data = ['email' => 'test@example.com', 'active' => false];
    $rules = [
        'email' => 'required|email',
        'active' => 'boolean',
    ];
    
    $result = SanityCheck::validate($data, $rules);
    if ($result->fails()) {
        // Handle errors: $result->errors()
    }
    

Implementation Patterns

1. Integration with Laravel Requests

Wrap incoming requests for automatic validation:

use ChameleonSystem\SanityCheck\Facades\SanityCheck;

public function store(Request $request)
{
    $result = SanityCheck::validate($request->all(), [
        'title' => 'required|string|max:255',
        'content' => 'nullable|string',
    ]);

    if ($result->fails()) {
        return response()->json($result->errors(), 422);
    }

    // Proceed with logic...
}

2. Dynamic Rule Generation

Use closures for runtime rules:

$rules = [
    'user_id' => function ($value, $attribute) {
        return User::where('id', $value)->exists() ? 'valid' : 'invalid';
    },
];

3. Custom Error Messages

Override default messages:

$rules = [
    'age' => [
        'rule' => 'integer|min:18',
        'message' => 'You must be at least 18 years old.',
    ],
];

4. Batch Validation

Validate arrays of data (e.g., bulk imports):

$users = [
    ['name' => 'Alice', 'email' => 'alice@example.com'],
    ['name' => 'Bob', 'email' => 'invalid-email'],
];

$results = SanityCheck::batchValidate($users, [
    'name' => 'required|string',
    'email' => 'required|email',
]);

// $results contains an array of Result objects per item.

5. Hooks & Events

Extend validation with events:

SanityCheck::extend('custom_rule', function ($value, $attribute, $params) {
    return $value === $params['expected'];
});

// Usage:
$rules = ['secret' => ['custom_rule', ['expected' => '123']]];

Gotchas and Tips

Pitfalls

  1. Rule Order Matters Rules are evaluated left-to-right. Place stricter rules (e.g., required) before type checks (e.g., integer).

  2. Nested Arrays The package doesn’t natively support nested arrays. Flatten or use a custom rule:

    $rules = [
        'user.*' => 'array|min:3',
        'user.*.role' => 'string',
    ];
    
  3. Performance with Large Datasets batchValidate() processes items sequentially. For parallel validation, use Laravel’s parallel helper or queue jobs.

  4. Facade vs. Direct Usage The facade caches the container instance. For testing, inject the SanityCheck class directly:

    $this->app->bind(SanityCheck::class, function () {
        return new SanityCheck();
    });
    

Debugging Tips

  • Enable Debug Mode Set 'debug' => true in config/sanitycheck.php to log raw validation data.

  • Inspect Failed Rules Use $result->failedRules() to see which rules triggered errors:

    dd($result->failedRules()); // ['email' => ['required']]
    
  • Custom Rule Debugging Add dd($value, $attribute, $params) inside custom rules to inspect inputs.

Extension Points

  1. Add Custom Rules Register globally in a service provider:

    SanityCheck::extend('slug', function ($value) {
        return preg_match('/^[a-z0-9\-]+$/', $value);
    });
    
  2. Override Default Rules Replace built-in rules (e.g., email) by redefining them:

    SanityCheck::override('email', function ($value) {
        return filter_var($value, FILTER_VALIDATE_EMAIL) !== false;
    });
    
  3. Integrate with Laravel Pipelines Chain validation with other logic:

    $result = SanityCheck::validate($data, $rules)
        ->then(function ($data) {
            // Post-validation logic
        });
    
  4. Localization Translate error messages via Laravel’s Lang facade:

    $rules = [
        'name' => [
            'rule' => 'required',
            'message' => trans('validation.required', ['attribute' => 'Name']),
        ],
    ];
    
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