johannebert/laravel-spam-protector
Protect Laravel forms from spam with this lightweight package offering configurable spam detection, blocked keywords, rate limiting, and honeypot-style checks—easy to drop into any form without external services.
composer require vendor/package. As of v7 the constraint floor is PHP 8.0+ and laravel/framework ^9.0 — if you are still on Laravel 8 or PHP 7.4, pin to the v6 line instead of forcing the upgrade.composer require fails, run composer why-not vendor/package 7.0 first. On Laravel 9 the usual culprit is a transitive dependency locked to Symfony 5 components.php artisan about on Laravel 9 lists discovered providers), then publish what you need:
php artisan vendor:publish --provider="Vendor\\Package\\PackageServiceProvider" --tag=configphp artisan vendor:publish --provider="Vendor\\Package\\PackageServiceProvider" --tag=migrationsphp artisan migrate, then exercise the package's main entry point (facade, helper, or injected contract) from php artisan tinker before wiring it into a controller. This isolates configuration problems from application problems.UPGRADE.md / CHANGELOG.md before anything else — the Laravel 9 bump is the headline, but point releases in a major often carry interface changes alongside it.new. Bind the package's contract in a service provider and type-hint it in constructors. This is what makes the package swappable and fakeable in tests.env() only inside the config file — not at call sites. This survives config:cache, which is where most "works locally, breaks in production" reports originate.RefreshDatabase for anything touching published migrations, and Http::fake() / Queue::fake() for the package's outbound edges. If the package ships a fake, register it in setUp() rather than mocking internals.config() mutations — some packages snapshot config at boot time in the service provider.composer dump-autoload and php artisan package:discover before debugging anything else. A stale bootstrap/cache/packages.php produces "class not found" errors that look like install failures.config:cache freezes config. Any env() call inside the package's runtime code (rather than its config file) returns null in production. Verify by running php artisan config:cache locally — this is the single most common post-upgrade bug.str_* / array_* global helpers, v7 has almost certainly migrated to Illuminate\Support\Str / Arr. Check your own subclasses and decorators, not just the package.Command return types (int is now enforced), and Process APIs tightened. Custom artisan commands extending the package's commands may need explicit return types.--tag=config silently publishes nothing, run the publish command with --provider alone and diff what appears in config/ and database/migrations/.config/logging.php), and set APP_DEBUG=true in a scratch environment. If behaviour differs between php artisan serve and Octane, suspect state held on a singleton resolved in the service provider."vendor/package": "^7.0" rather than "*", and let Dependabot surface minor bumps so a Laravel 9 patch release does not arrive silently alongside behaviour changes.How can I help you explore Laravel packages today?