Installation:
composer require raditzfarhan/sahrule
No additional configuration is required—just publish the package.
First Use Case: Validate a base64-encoded image in a request:
use RaditzFarhan\SahRule\Rules\Base64Image;
use Illuminate\Http\Request;
public function store(Request $request) {
$validated = $request->validate([
'image' => ['required', new Base64Image],
]);
}
Where to Look First:
RaditzFarhan\SahRule\Rules for all available rules.Rules directory for customization or extension points.Basic Validation:
Use rules directly in validate() calls:
$request->validate([
'field' => [new CustomRule],
]);
Parameterized Rules: Pass arguments to rules (e.g., allowed MIME types):
$request->validate([
'image' => [new Base64Image('png', 'jpeg')],
]);
Reusable Rule Objects: Store rules in a dedicated class for DRY validation:
class ImageRules {
public static function base64Image(string ...$types) {
return new Base64Image(...$types);
}
}
Usage:
$request->validate([
'image' => [ImageRules::base64Image('png')],
]);
Form Request Integration:
Extend FormRequest to centralize validation logic:
use RaditzFarhan\SahRule\Rules\Base64Image;
public function rules() {
return [
'image' => ['required', new Base64Image('gif')],
];
}
Combining with Laravel Rules: Mix custom rules with built-in Laravel rules:
$request->validate([
'image' => ['required', 'max:2048', new Base64Image],
]);
API Requests: Validate base64 payloads (e.g., frontend uploads):
$request->validate([
'avatar' => [new Base64Image('jpg', 'png')],
]);
CSV/Excel Imports: Validate base64-encoded images in spreadsheet cells:
$row->validate([
'profile_pic' => [new Base64Image],
]);
Dynamic Rule Application: Use conditional logic to apply rules:
$rules = ['required'];
if ($request->has('allow_images')) {
$rules[] = new Base64Image;
}
$request->validate(['image' => $rules]);
Laravel 8+:
Use Rule facade for fluent syntax (if rules support it):
use RaditzFarhan\SahRule\Facades\Rule;
$request->validate([
'image' => [Rule::base64Image()],
]);
(Note: Check if the package provides a facade; if not, create one.)
Testing: Mock rules in unit tests:
$rule = new Base64Image;
$this->assertTrue($rule->passes('data:image/png;base64,...'));
Localization:
Override error messages in resources/lang/{locale}/validation.php:
'custom' => [
'base64_image' => [
'invalid' => 'The :attribute must be a valid base64-encoded image.',
],
],
Rule Initialization:
Base64Image).// Fails if 'png' is not allowed by default
new Base64Image; // May reject valid PNGs
Base64 Data Format:
data:image/png;base64,...).$data = str_starts_with($request->image, 'data:') ? $request->image : 'data:image/png;base64,' . $request->image;
Performance:
Namespace Conflicts:
RaditzFarhan\SahRule, alias the namespace:
use RaditzFarhan\SahRule\Rules as SahRules;
Undocumented Rules:
Rules/Base64Image.php) for behavior details.Validation Errors:
message() method for custom error messages:
$rule = new Base64Image;
$rule->message(); // Returns default error message
$request->validate([
'image' => [new Base64Image, 'custom_message'],
]);
Logging:
$rule = new Base64Image;
\Log::debug('Rule input:', [$request->image]);
Testing Edge Cases:
$this->assertFalse((new Base64Image)->passes('invalid_base64_string'));
Extending Rules:
RaditzFarhan\SahRule\Rules\BaseRule (if available):
namespace App\Rules;
use RaditzFarhan\SahRule\Rules\BaseRule;
class CustomImageRule extends BaseRule {
public function passes($attribute, $value) {
// Custom logic
}
}
Configuration:
// config/sahrule.php
'default_image_types' => ['png', 'jpeg'],
Laravel 9+:
Illuminate\Validation\Rule for seamless integration:
use Illuminate\Validation\Rule;
use RaditzFarhan\SahRule\Rules\Base64Image;
$rule = Rule::custom(function ($attribute, $value) {
return (new Base64Image)->passes($attribute, $value);
});
Performance Optimization:
$validator = Validator::make($data, ['image' => [new Base64Image]]);
$validator->validate(); // Reuse validator instance
Community Contributions:
Base64Video, Base64PDF).How can I help you explore Laravel packages today?