canvural/larastan-strict-rules
Extra strict, opinionated PHPStan rules for Laravel via Larastan. Enforce safer patterns by banning dynamic where methods, facades, and global helpers; prevent validation in controllers; ensure scopes return Eloquent Builder. Enable all at once or toggle rules individually.
where clauses). This fits architectures emphasizing explicitness over convenience (e.g., DDD, clean code, or large-scale monoliths).--dev).rules.neon).parameters (e.g., whitelisting global functions).where clauses for complex queries, facades for global services like Auth). Requires incremental adoption (enable rules one-by-one).NoDynamicWhereRule might misfire on dynamic relations (fixed in v2.2.3).NoFacadeRule)?phpstan/extension-installer) that conflict?phpstan --memory-limit=1G --generate-report.)allowedGlobalFunctions) be required for legacy code?composer require --dev nunomaduro/larastan phpstan/phpstan
composer.json (dev dependency).rules.neon in PHPStan config:
includes:
- vendor/canvural/larastan-strict-rules/rules.neon
noFacade: true).parameters:
larastanStrictRules:
allRules: false
parameters:
larastanStrictRules:
noFacade: true
noGlobalLaravelFunction: true
allowedGlobalFunctions: [auth, cache]
--level=max to catch violations early.--generate-report to track progress over time.phpstan/laravel). Resolve via:
includes in phpstan.neon (later entries override earlier ones).vendor/bin/phpstan analyse --generate-baseline
NoFacadeRule (easy to refactor).ListenerShouldHaveVoidReturnTypeRule (clear intent).NoDynamicWhereRule for complex queries).extension-classes if needed.Auth::user() with dependency injection").| Rule | Common Fix | Example |
|---|---|---|
NoFacadeRule |
Use constructor injection | public function __construct(private UserRepository $users) |
NoDynamicWhereRule |
Use query scopes or static methods | Model::whereActive()->get() |
--error-format=github for CI-friendly output.--parallel flag.--cache-result).--files src/).| Risk | Mitigation Strategy | Example |
|---|---|---|
| Build Breaks | Incremental rule adoption + baselines | Enable 1–2 rules per |
How can I help you explore Laravel packages today?