Настройка и проверка PHPStan
Что такое PHPStan?
PHPStan – это мощный статический анализатор, который помогает находить ошибки в коде без его выполнения. Он анализирует типы данных, возможные ошибки, нарушение контрактов и другие проблемы, которые могут привести к багам в продакшене. Если вы используете Laravel, то стандартного PHPStan может быть недостаточно. Специально для Laravel существует расширение Larastan, которое учитывает особенности фреймворка, такие как Eloquent-модели, фасады и контейнер зависимостей.
Установка и настройка Larastan (в т.ч. PHPStan)
1. Устанавливаем Larastan через Composer:
composer require --dev larastan/larastan
в данном случае, пакет phpstan/phpstan установится, как зависимость, вместе с Larastan
2. Создаем конфигурационный файл phpstan.neon в корне проекта:
includes:
- ./vendor/larastan/larastan/extension.neon
parameters:
paths:
- app/
- app-modules/
# Level 9 is the highest level
level: 8
stubFiles:
- vendor/nuwave/lighthouse/_ide_helper.php
checkModelProperties: true
checkGenericClassInNonGenericObjectType: false
excludePaths:
...
Здесь мы подключаем Larastan – расширение PHPStan для Laravel, а также задаём 8 (из 9) уровень проверки. Paths – указываем какие папки необходимо проверять. Секция stubFiles указывает PHPStan на файлы заглушек. Эти файлы помогают анализатору понимать код, который иначе был бы для него недоступен. checkModelProperties - включает проверку свойств моделей Eloquent. checkGenericClassInNonGenericObjectType - отключает строгую проверку generic-классов, когда они используются как обычные объекты. В секции excludePaths можно указать пути, по которым не требуется проверка phpstan.
3. Запускаем анализ кода:
vendor/bin/phpstan analyse
Кроме проверок на этапе написания кода, мы используем автоматическую проверку кода перед развертыванием. Мы добавили в .gitlab-ci.yml строку запуска проверки
сode static analyze:
stage: analyze
image: registry.dev-mage3.com/developers/astrio-laravel:base
dependencies:
- composer
before_script:
- cd app script:
- ./vendor/bin/phpstan analyze app/ app-modules/ --memory-limit 2048M
allow_failure: true
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'dev'
tags: [ dind ]
После этого PHPStan запускается автоматически, когда создаётся merge request в ветку dev.
Настройка и проверка Laravel Pint
Что такое Laravel Pint?
Laravel Pint – это инструмент для автоматического форматирования кода в соответствии с код-стандартами Laravel. Он помогает поддерживать единый стиль кода без необходимости вручную исправлять форматирование.
Установка Laravel Pint
Устанавливаем через Composer:
composer require --dev laravel/pint
Запускать Pint можно командой с консоли
vendor/bin/pint
Настройки хранятся в корне проекта в файле pint.json. Вот пример, который у нас используется на одном из проектов:
используется на одном из проектов:
{
"preset": "laravel",
"rules": {
"strict_param": false,
"array_syntax": {
"syntax": "short"
},
"declare_strict_types": true,
"comment_to_phpdoc": true
},
"exclude": [
]
}
Preset - используется Laravel-стиль кодирования. strict_param - строгая проверка параметров отключена. "syntax": "short" - включён короткий синтаксис массивов []. declare_strict_types - добавляется declare(strict_types=1); в начало файлов. comment_to_phpdoc - обычные комментарии превращаются в PHPDoc.
Laravel Pint – это инструмент для автоматического форматирования кода, который можно легко интегрировать в PhpStorm. Для этого указываем в настройках File → Settings. Php – Quality Tools – Laravel Pint. Указываем путь к Pint, например app/vendor/bin/pint, указываем путь к настройкам.

После этого в редакторе будет появляться подсказка с предложением исправить код

Laravel Pint автоматически форматирует код, приводя его к единому стилю, что делает его чище и удобнее для чтения. Он исправляет отступы, удаляет лишние пробелы и пустые строки, приводит массивы к короткому синтаксису и унифицирует кавычки. Также Pint добавляет строгую типизацию, исправляет комментарии и DocBlock, упрощает конструкции функций и убирает дублирующиеся импорты. Это помогает поддерживать код в чистом состоянии и снижает вероятность ошибок.
Настройка и проверка Laravel IDE Helper
Что такое Laravel IDE Helper?
Laravel IDE Helper создаёт вспомогательные файлы для улучшения автодополнения в PhpStorm и других IDE. Это делает разработку удобнее, особенно при работе с фасадами, моделями и сервисами Laravel/
Установка и генерация файлов
Устанавливаем пакет:
composer require --dev barryvdh/laravel-ide-helper
Публикуем конфигурацию
php artisan vendor:publish --provider="Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider" --tag=config
После установки мы прописали в composer.json команду для автоматической генерации подсказок при обновлении зависимостей. В разделе scripts.post-update-cmd указали следующий код:
"post-update-cmd": [
....
"@php artisan ide-helper:generate",
"@php artisan ide-helper:meta",
"@php artisan lighthouse:ide-helper"
]
Если вы хотите выполнить генерацию вручную, используйте следующие команды:
php artisan ide-helper:generate php artisan ide-helper:meta php artisan lighthouse:ide-helper
Преимущества использования IDE Helper
1. Улучшенное автодополнение - IDE (например, PhpStorm, VS Code) смогут точно определять методы фасадов Laravel, например:
use Illuminate\Support\Facades\Cache;
Cache::put('key', 'value', 600); // Без IDE Helper – методы могут быть не распознаны
2.Подсказки по моделям - После генерации ide-helper:models в коде появятся аннотации с доступными свойствами моделей:
/**
* App\Models\User
*
* @property int $id
* @property string $name
* @property string $email
* @property \Illuminate\Support\Carbon $created_at
* @property \Illuminate\Support\Carbon $updated_at
*/
class User extends Model {}
Теперь при обращении к $user->name IDE будет знать, что это строка.
3.GraphQL (Lighthouse) - Если используется Lighthouse, команда lighthouse:ide-helper генерирует корректные типы для GraphQL-запросов, улучшая автодополнение схем и резолверов.
Использование IDE Helper делает разработку в Laravel удобнее: снижает вероятность ошибок, ускоряет написание кода и улучшает читаемость. Настроив автоматическую генерацию в composer.json, можно избежать необходимости ручного обновления подсказок после изменения зависимостей.
Дополнительно, это позволяет:
1. Экономить время разработчиков за счёт корректного автодополнения.
2. Улучшить качество кода, снижая вероятность использования несуществующих методов и свойств.
3. Делать код более понятным и самодокументируемым за счёт аннотаций.
4. Упростить работу с GraphQL при использовании Lighthouse.
5. Все эти преимущества делают IDE Helper незаменимым инструментом при разработке сложных проектов на Laravel.
Выводы
Использование PHPStan, Laravel Pint и Laravel IDE Helper в связке даёт максимально эффективный контроль качества кода в Laravel-проектах.
PHPStan обеспечивает статический анализ кода, выявляя ошибки, потенциальные баги и нарушения строгой типизации до момента выполнения. Это делает код безопаснее и уменьшает количество неожиданных ошибок в продакшене.
Laravel Pint автоматически форматирует код в соответствии с современными стандартами. Он устраняет стилистические недочёты, унифицирует синтаксис и повышает читаемость, упрощая командную работу.
Laravel IDE Helper значительно улучшает автодополнение и навигацию в PhpStorm и других IDE. Он устраняет проблему "магических методов" Laravel, делая работу с кодом удобнее и эффективнее.
Почему именно этот стек инструментов?
Эти три инструмента идеально дополняют друг друга:
1. PHPStan помогает находить логические ошибки.
2. Pint автоматически поддерживает кодстайл.
3. IDE Helper делает работу с Laravel в IDE интуитивной и предсказуемой.
Для Laravel нет более мощного набора инструментов, обеспечивающего чистоту, качество и удобство работы с кодом
