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

Laravel Bd Phone Verification Rule Laravel Package

nanopkg/laravel-bd-phone-verification-rule

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require nanopkg/laravel-bd-phone-verification-rule
    

    No additional configuration is required—this package registers its validation rule automatically.

  2. First Use Case: Validate a Bangladesh phone number in a form request:

    use Illuminate\Http\Request;
    
    public function store(Request $request)
    {
        $request->validate([
            'phone' => 'required|bdPhone', // Validates Bangladesh phone format
        ]);
    }
    
  3. Where to Look First:

    • Rule Documentation: The bdPhone rule validates formats like 01XXXXXXXX (11 digits, starting with 01), +8801XXXXXXXX, or 8801XXXXXXXX.
    • Error Messages: Default error message is "The phone number is not a valid Bangladesh phone number." (customizable via addCustomAttributes() or mergeCustomAttributes()).

Implementation Patterns

Core Workflows

  1. Form Validation:

    // In a FormRequest or controller
    $validated = $request->validate([
        'user_phone' => 'required|bdPhone',
        'admin_phone' => 'nullable|bdPhone',
    ]);
    
  2. Dynamic Validation: Use the rule directly in custom validation logic:

    use Nanopkg\BdPhoneVerificationRule\Rules\BdPhone;
    
    $validator = Validator::make($data, [
        'phone' => ['required', new BdPhone],
    ]);
    
  3. API Requests: Validate phone numbers in API payloads (e.g., Laravel Sanctum or Passport):

    $request->validate([
        'phone' => 'required|bdPhone',
    ]);
    
  4. Model Rules: Attach validation to Eloquent models:

    use Illuminate\Validation\Rule;
    
    public function rules()
    {
        return [
            'phone' => ['required', 'bdPhone'],
        ];
    }
    

Integration Tips

  • Localization: Override error messages in your language files:
    'custom' => [
        'bdPhone' => [
            'required' => 'The :attribute is required.',
            'bdPhone'  => 'The :attribute must be a valid Bangladesh phone number.',
        ],
    ],
    
  • Partial Validation: Combine with other rules (e.g., uniqueness):
    $request->validate([
        'phone' => 'required|bdPhone|unique:users,phone',
    ]);
    
  • Testing: Use the rule in PHPUnit tests:
    $this->assertTrue((new BdPhone)->passes('01712345678'));
    $this->assertFalse((new BdPhone)->passes('9876543210'));
    

Gotchas and Tips

Pitfalls

  1. Format Strictness:

    • The rule does not accept:
      • Numbers without 01 prefix (e.g., 1712345678).
      • International formats like +880-1712345678 (use +8801712345678 instead).
      • Non-numeric inputs (e.g., 017-12345678).
    • Fix: Sanitize input before validation or use numeric rule:
      $request->validate(['phone' => 'required|numeric|bdPhone']);
      
  2. Edge Cases:

    • Leading Zeros: Ensure the input is treated as a string (not integer) to preserve 01 prefix.
      $phone = (string) $request->phone; // Force string type
      
    • Whitespace: Trim input to avoid validation failures:
      $request->validate(['phone' => 'required|bdPhone|trim']);
      
  3. Customization Limits:

    • The rule is not extensible for non-Bangladesh formats (e.g., adding support for 01X or +880X variants requires forking the package).

Debugging

  • Validate Manually:
    $rule = new \Nanopkg\BdPhoneVerificationRule\Rules\BdPhone;
    if (!$rule->passes('invalid_phone')) {
        echo $rule->message(); // Debug error message
    }
    
  • Check Input: Use dd($request->phone) to verify the raw input before validation.

Extension Points

  1. Custom Error Messages: Override globally in AppServiceProvider:

    Validator::extend('bdPhone', function ($attribute, $value, $parameters, $validator) {
        return (new BdPhone)->passes($value);
    });
    Validator::replacer('bdPhone', function ($message, $attribute, $rule, $parameters) {
        return 'Custom error for ' . $attribute;
    });
    
  2. Pre-Validation: Sanitize input in a Filter or Request macro:

    Request::macro('sanitizeBdPhone', function () {
        return str_replace([' ', '-', '+'], '', $this->phone);
    });
    

    Then use:

    $request->validate(['phone' => 'required|bdPhone', 'sanitizeBdPhone']);
    
  3. Testing Edge Cases: Write tests for:

    • Valid formats: 01712345678, +8801712345678, 8801712345678.
    • Invalid formats: 1712345678, 0123456789, abcdefghijk.
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.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle