Analiză statică în Laravel cu PHPStan și Larastan
Acest ghid explică utilizarea PHPStan și Larastan pentru analiză statică în aplicațiile Laravel, de la instalare și configurare până la exemple practice și bune practici pentru menținerea calității codului.
1. Ce este analiza statică?
Analiza statică verifică codul fără a executa aplicația. Detectează: - erori de tipuri - metode inexistente - proprietăți invalide - probleme de design
În Laravel, combinația standard este:
- PHPStan -- motorul de analiză
- Larastan -- extensie care înțelege Eloquent, Facades, Container, etc.
2. Instalarea PHPStan
composer require --dev phpstan/phpstan
Test rapid:
vendor/bin/phpstan analyse
3. Instalarea Larastan
composer require --dev nunomaduro/larastan
4. Configurarea phpstan.neon
Creează fișierul phpstan.neon:
includes:
- vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
- app
level: 6
checkMissingIterableValueType: false
Niveluri PHPStan
- 0--3: bazic
- 4--6: recomandat pentru majoritatea proiectelor
- 7--9: strict (enterprise)
5. Creșterea nivelului progresiv
Strategie recomandată:
- Începe cu nivel 5--6
- Fixează erorile
- Crește la 7--8
- Elimină folosirea
mixed
6. Folosirea Baseline (pentru proiecte mari)
Dacă proiectul are multe erori existente:
vendor/bin/phpstan analyse --generate-baseline
Va crea:
phpstan-baseline.neon
Adaugă în config:
includes:
- phpstan-baseline.neon
Astfel eviți blocarea pipeline-ului pe erori vechi.
7. Exemple reale de erori detectate
Return type greșit
public function getUser(): User
{
return null;
}
Proprietate inexistentă
$user->fullname;
Tip greșit într-o metodă
public function setAge(int $age)
{
}
$this->setAge("25");
8. Probleme comune în Laravel
Eloquent fără tipuri
Recomandare:
/** @property string $name */
class User extends Model
{
}
Sau folosirea generics în repository.
9. Integrare CI/CD (GitHub Actions)
name: Static Analysis
on: [push]
jobs:
phpstan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: shivammathur/setup-php@v2
with:
php-version: 8.2
- run: composer install
- run: vendor/bin/phpstan analyse
10. Bune practici
- Rulează analiza la fiecare PR
- Nu ignora erori fără justificare
- Folosește tipuri returnate peste tot
- Evită
@phpstan-ignore-next-line - Rulează PHPStan local înainte de commit
11. Nivel strict (exemplu enterprise)
parameters:
level: 9
reportUnmatchedIgnoredErrors: true
Concluzie
Integrarea PHPStan + Larastan într-un proiect Laravel ridică semnificativ calitatea codului, previne bug-uri înainte de runtime și face aplicația mai sigură, predictibilă și ușor de mentenanțat.