Lens PHP
Detecção fina
| Sinal | Variante |
|---|---|
artisan na raiz |
Laravel |
bin/console + symfony/framework-bundle em deps |
Symfony |
slim/slim em deps |
Slim |
hyperf/hyperf em deps |
Hyperf |
laminas/laminas-mvc em deps |
Laminas (Zend) |
index.php em public/ sem framework |
Legacy / vanilla |
wp-config.php |
WordPress |
Extração de padrões
Composer
- PSR-4 autoload mappings (qual namespace -> qual pasta)
- Versão min de PHP (
require.php) - Dev dependencies relevantes (phpunit, phpstan, psalm, php-cs-fixer, rector)
Estrutura
Laravel:
app/Http/Controllers,app/Models,app/Services,app/Repositoriesroutes/{web,api,console,channels}.phpdatabase/migrations,database/seeders,database/factoriesconfig/,resources/,bootstrap/
Symfony:
src/Controller,src/Entity,src/Repository,src/Serviceconfig/services.yaml,config/routes.yamlmigrations/
Dependency Injection
- Laravel: container service, providers em
app/Providers/, binding emregister() - Symfony: services.yaml, autowire, autoconfigure
- Manual em vanilla
Errors
- Exceptions customizadas (extends Exception ou DomainException)
- Handler global (Laravel:
app/Exceptions/Handler.php; Symfony: ExceptionListener) - HTTP error mapping
Validação
- Laravel: Form Requests em
app/Http/Requests/, rules - Symfony: Validator constraints / annotations
- Manual via if's
ORM
- Eloquent (Laravel)
- Doctrine (Symfony)
- Query Builder direto
- PDO raw
Testing
- PHPUnit (mais comum)
- Pest (alternativa moderna)
- Pasta
tests/comUnit,Feature,Integration - Factories Laravel / fixtures Doctrine
- Mocks com Mockery
Filas / Mensageria
- Laravel: Horizon, jobs em
app/Jobs/ - Symfony: Messenger
- Hyperf: AMQP, Kafka
Static analysis
- PHPStan level configurado (8 = strict)
- Psalm
- PHP-CS-Fixer rules
- Rector rules
PSR compliance
- PSR-12 (style) - verificar via php-cs-fixer config
- PSR-7 (HTTP messages) - check em libs como
slim/psr7,nyholm/psr7 - PSR-15 (HTTP middleware)
- PSR-3 (logger interface)
Logging
- Laravel:
Logfacade (Monolog underneath) - Symfony: Monolog
- Configuração de canais
Output em .first-plan/
Igual estrutura padrão. Atenção especial:
02-conventions/di.md- container vs autowire vs manual01-topology/boundaries.md- rotas, jobs, comandos artisan/console
Confidence rules
Aumentar:
- Configuração estática (phpstan.neon, .php-cs-fixer.dist.php) presente e respeitada
- PSR autoload bem formado em composer.json
Reduzir:
- Mistura de namespaces antigos (
includedireto) e PSR-4 - Migrations órfãs vs models que existem mas não têm migration
Anti-padrões comuns
include/requireem vez de autoload$_GET,$_POSTdireto em handler- SQL concatenado (em vez de prepared statement / ORM)
- Lógica em controller (Laravel - sinal de service ausente)
- God models (Eloquent model com 50+ métodos)