sadegh19b/laravel-persian-validation
Laravel Persian Validation adds ready-to-use rules for validating Persian text, numbers, dates, national ID codes, bank card numbers, IBAN/Sheba, postal codes, and mobile numbers. Integrate Iranian-specific validation into any Laravel app with familiar syntax and localized error messages.
composer diff isn't a thing, so browse the compare view (v2.0.x...v2.1.0) on the repo and scan composer.json + src/ for anything beyond version bumps.illuminate/* ^13.0. If your app is still on Laravel 12, keep the constraint at ^2.0 so Composer doesn't try to pull 2.1.0 and fail resolution against your framework pin.composer require <vendor>/<package>:^2.1 (use ~2.1.0 if you need reproducible builds across a fleet of apps).php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" to list available tags.php artisan vendor:publish --tag=package-config for config.php artisan vendor:publish --tag=package-migrations if it ships tables, then php artisan migrate.php artisan about and php artisan package:discover -v are the two fastest sanity checks that the service provider registered. If it's missing, check the extra.laravel.dont-discover block in your composer.json..env keys (usually driver/connection/queue), open config/package.php to see which keys have env fallbacks, then exercise one call from php artisan tinker before wiring it into a controller. If the package is queue-backed, dispatch a single job and watch php artisan queue:work --once — that surfaces config problems that a synchronous call hides.bind() change rather than a grep across controllers.config/package.php with env() fallbacks, and use per-environment .env values. Reserve config()->set() for tests and per-tenant rebinding — never for production wiring.config([...]) and app()->forgetInstance(ThePackage::class) — updating config alone leaves the stale instance alive.Http::fake() / Queue::fake() plus the package's own fakes if it ships them; otherwise integration-test with an in-memory SQLite connection. Add one test that asserts the config resolves as expected so a future major bump fails loudly.composer update <vendor>/<package> --with-dependencies → run the app's test suite → only then vendor:publish --tag=package-config --force after diffing the published config against the new stub. Never blanket-force-publish; you'll silently clobber customized migrations.composer.json, not proof of behaviour. Laravel majors remove deprecated APIs; the package may still call something that only survives on 13 if you're coming from 11. Run your suite on the target framework version before shipping, not just composer update.^2.1 constraint on a Laravel 12 app produces a confusing "your requirements could not be resolved" message. Test with composer why-not <vendor>/<package> 2.1.0 — it names the exact blocking package, which saves far more time than reading the solver output.config:cache freezes env values. Any .env change after php artisan config:cache is invisible. Re-run config:cache (or config:clear locally) in every deploy step, and remember it inside queue workers too.vendor:publish can overwrite migrations you've already modified. Always pass --tag= and --force deliberately.register() for bindings and boot() for anything that depends on other providers being ready.config() changes plus a resolved singleton equals a bug that looks like "the package ignores my settings." forgetInstance() after rebinding, or bind as a non-shared instance.composer show <vendor>/<package> (confirm the installed version is really 2.1.0) → php artisan package:discover -v (provider registered?) → php artisan about → php artisan tinker calling the smallest method → Log::debug(config('package')) to confirm config reached the container.~2.1.0 gives you reproducibility; for a library that depends on this, ^2.1 lets consumers resolve. Mixing the two across a monorepo is a common source of duplicate-install headaches.How can I help you explore Laravel packages today?