Да, в экосистеме PHP, включая фреймворки Laravel и Yii, существуют инструменты, аналогичные Prettier и ESLint, которые помогают форматировать код, проверять его на ошибки и поддерживать единый стиль. Основные инструменты для PHP — это PHP CS Fixer (форматирование) и PHP_CodeSniffer (линтинг). Для более современной и мощной проверки стиля и ошибок также используется Psalm или PHPStan (статический анализ).
Ниже приведена подробная инструкция по настройке этих инструментов в PHP-проекте (Laravel, Yii) и их интеграции с VS Code, включая автоматическое форматирование и линтинг при сохранении.
- PHP CS Fixer: Это популярный инструмент для автоматического форматирования PHP-кода в соответствии с заданными стандартами кодирования (например, PSR-12, Laravel, Symfony и т.д.). Он исправляет отступы, пробелы, порядок импортов и многое другое.
- Prettier с плагином для PHP: Prettier также поддерживает PHP через плагин
prettier-plugin-php
, но он менее популярен в PHP-сообществе по сравнению с PHP CS Fixer, так как последний более настраиваемый и лучше интегрируется с PHP-фреймворками.
- PHP_CodeSniffer (phpcs): Это инструмент для проверки стиля кода (code sniffing). Он проверяет код на соответствие стандартам кодирования, таким как PSR-2, PSR-12, или кастомным правилам. Также включает инструмент
phpcbf
для автоматического исправления ошибок. - Psalm: Инструмент статического анализа для PHP, который проверяет код на ошибки, типы и потенциальные баги. Очень популярен в Laravel-сообществе.
- PHPStan: Еще один инструмент статического анализа, аналогичный Psalm, но с немного другим подходом. Часто используется в Yii и других проектах.
Перед настройкой VS Code установите необходимые инструменты в вашем проекте. Мы будем использовать PHP CS Fixer для форматирования и PHP_CodeSniffer для линтинга, так как они наиболее популярны и хорошо интегрируются с Laravel и Yii.
Убедитесь, что у вас установлен PHP (скачать можно с php.net). Проверьте версию:
php -v
Composer — это менеджер зависимостей для PHP, который понадобится для установки инструментов. Убедитесь, что он установлен (скачать можно с getcomposer.org). Проверьте версию:
composer --version
Установите PHP CS Fixer как зависимость разработки в вашем проекте:
composer require --dev friendsofphp/php-cs-fixer
После установки вы сможете запускать PHP CS Fixer через ./vendor/bin/php-cs-fixer
.
Установите PHP_CodeSniffer как зависимость разработки:
composer require --dev squizlabs/php_codesniffer
После установки вы сможете запускать phpcs
(для проверки) и phpcbf
(для исправления) через ./vendor/bin/phpcs
и ./vendor/bin/phpcbf
.
Для использования PHP CS Fixer и PHP_CodeSniffer создайте файлы конфигурации в корне проекта.
-
Настройка PHP CS Fixer:
-
Создайте файл
.php-cs-fixer.dist.php
в корне проекта. Пример конфигурации для Laravel или Yii (с использованием стандарта PSR-12):<?php $finder = PhpCsFixer\Finder::create() ->in(__DIR__) ->exclude('vendor') ->exclude('storage') ->exclude('bootstrap/cache') ->name('*.php') ->notName('*.blade.php') // Исключаем Blade-шаблоны в Laravel ->ignoreDotFiles(true) ->ignoreVCS(true); return (new PhpCsFixer\Config()) ->setRules([ '@PSR12' => true, // Используем стандарт PSR-12 'array_syntax' => ['syntax' => 'short'], // Короткий синтаксис для массивов 'ordered_imports' => ['sort_algorithm' => 'alpha'], // Сортировка импортов 'no_unused_imports' => true, // Удаление неиспользуемых импортов 'trailing_comma_in_multiline' => true, // Запятая в многострочных массивах ]) ->setFinder($finder);
-
Для Laravel можно добавить дополнительные правила, например, для форматирования Blade-шаблонов (если используете
laravel/pint
, см. ниже).
-
-
Настройка PHP_CodeSniffer:
-
Создайте файл
phpcs.xml
в корне проекта. Пример конфигурации для PSR-12:<?xml version="1.0"?> <ruleset name="MyProject"> <description>Правила кодирования для проекта</description> <file>.</file> <exclude-pattern>vendor/*</exclude-pattern> <exclude-pattern>storage/*</exclude-pattern> <exclude-pattern>bootstrap/cache/*</exclude-pattern> <exclude-pattern>*.blade.php</exclude-pattern> <arg name="extensions" value="php"/> <rule ref="PSR12"/> </ruleset>
-
Этот файл указывает, какие файлы проверять и какие стандарты использовать.
-
Если вы работаете с Laravel, вы можете использовать Laravel Pint — официальный инструмент форматирования от Laravel, который основан на PHP CS Fixer, но с предустановленными правилами для Laravel. Установите его:
composer require --dev laravel/pint
После установки вы сможете запускать Pint через ./vendor/bin/pint
.
Для удобства добавьте команды для форматирования и линтинга в composer.json
:
{
"scripts": {
"format": "vendor/bin/php-cs-fixer fix",
"lint": "vendor/bin/phpcs",
"lint:fix": "vendor/bin/phpcbf",
"pint": "vendor/bin/pint" // Только для Laravel
}
}
Теперь вы можете запускать форматирование и линтинг командами composer format
, composer lint
, composer lint:fix
или composer pint
(для Laravel).
Теперь настроим VS Code для автоматического форматирования и линтинга при сохранении, а также для отображения ошибок в реальном времени.
- Откройте панель расширений в VS Code (
Ctrl+Shift+X
). - Установите следующие расширения:
- PHP Intelephense (разработчик:
bmewburn.vscode-intelephense-client
) — мощное расширение для автодополнения, анализа кода и поддержки PHP. - PHP CS Fixer (разработчик:
junstyle.vscode-php-cs-fixer
) — для интеграции PHP CS Fixer. - PHP_CodeSniffer (разработчик:
ikappas.phpcs
) — для интеграции PHP_CodeSniffer. - Laravel Blade Snippets (разработчик:
onecentlin.laravel-blade
) — для поддержки Blade-шаблонов в Laravel (опционально).
- PHP Intelephense (разработчик:
После установки перезапустите VS Code, чтобы активировать расширения.
Чтобы код автоматически форматировался с помощью PHP CS Fixer (или Laravel Pint) при сохранении:
-
Откройте настройки VS Code (
Ctrl + ,
). -
Найдите настройку
Editor: Format On Save
и включите ее (если еще не включена). -
Настройте PHP CS Fixer как форматтер:
- Откройте файл настроек VS Code в формате JSON:
- Нажмите
Ctrl + Shift + P
, введите "Preferences: Open Settings (JSON)" и выберите этот пункт. - Или откройте файл вручную:
C:\Users\<ВашПользователь>\AppData\Roaming\Code\User\settings.json
(в Windows).
- Нажмите
- Откройте файл настроек VS Code в формате JSON:
-
Добавьте следующие настройки в
settings.json
:{ "editor.formatOnSave": true, "php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/php-cs-fixer", "php-cs-fixer.formatHtml": true, "php-cs-fixer.onsave": true, "[php]": { "editor.formatOnSave": true, "editor.defaultFormatter": "junstyle.php-cs-fixer" } }
Объяснение настроек:
"editor.formatOnSave": true
— включает форматирование при сохранении для всех типов файлов."php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/php-cs-fixer"
— указывает путь к исполняемому файлу PHP CS Fixer в вашем проекте (если он установлен через Composer)."php-cs-fixer.formatHtml": true
— включает форматирование HTML внутри PHP-файлов (например, в Blade-шаблонах для Laravel)."php-cs-fixer.onsave": true
— включает форматирование PHP CS Fixer при сохранении."[php]": { ... }
— задает настройки форматирования только для PHP-файлов, чтобы избежать конфликтов с другими языками.
Примечание для Laravel Pint: Если вы используете Laravel Pint вместо PHP CS Fixer, настройте его как форматтер. Установите расширение Laravel Pint (если доступно) или используйте PHP CS Fixer с кастомной командой. Например:
{ "editor.formatOnSave": true, "[php]": { "editor.formatOnSave": true, "editor.defaultFormatter": "junstyle.php-cs-fixer" }, "php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/pint", "php-cs-fixer.formatHtml": true, "php-cs-fixer.onsave": true }
Чтобы ошибки линтинга отображались в реальном времени и автоматически исправлялись при сохранении с помощью PHP_CodeSniffer:
-
Убедитесь, что PHP_CodeSniffer установлен (см. шаг 2.4 выше).
-
Настройте расширение PHP_CodeSniffer в VS Code:
- Откройте настройки VS Code (
Ctrl + ,
). - В строке поиска введите "phpcs".
- Найдите
PHP CodeSniffer: Enable
и включите (чтобы активировать расширение). - Найдите
PHP CodeSniffer: Executable Path
и укажите путь кphpcs
, например:${workspaceFolder}/vendor/bin/phpcs
. - Найдите
PHP CodeSniffer: Autofix On Save
и включите, чтобы автоматически исправлять ошибки при сохранении.
- Откройте настройки VS Code (
-
Добавьте настройки в
settings.json
для более точной конфигурации:{ "phpcs.enable": true, "phpcs.executablePath": "${workspaceFolder}/vendor/bin/phpcs", "phpcs.standard": "PSR12", "phpcs.autoFixOnSave": true }
Объяснение настроек:
"phpcs.enable": true
— включает расширение PHP_CodeSniffer."phpcs.executablePath": "${workspaceFolder}/vendor/bin/phpcs"
— указывает путь к исполняемому файлуphpcs
."phpcs.standard": "PSR12"
— указывает стандарт кодирования (можно заменить на путь к вашемуphpcs.xml
, например,"${workspaceFolder}/phpcs.xml"
)."phpcs.autoFixOnSave": true
— включает автоматическое исправление ошибок с помощьюphpcbf
при сохранении.
Чтобы ошибки линтинга отображались в редакторе в реальном времени (подчеркивание красным, подсказки и т.д.):
- Убедитесь, что расширение PHP_CodeSniffer активно:
- Внизу в статус-баре VS Code должен быть значок PHP_CodeSniffer (если он не отображается, проверьте, включено ли расширение).
- Убедитесь, что PHP Intelephense активно:
-
PHP Intelephense предоставляет дополнительную диагностику и автодополнение. Убедитесь, что оно включено в настройках:
- Откройте настройки (
Ctrl + ,
), найдите "intelephense" и убедитесь, что расширение активно.
- Откройте настройки (
-
Добавьте в
settings.json
:{ "intelephense.diagnostics.enable": true, "intelephense.format.enable": false // Отключаем форматирование Intelephense, чтобы избежать конфликтов }
-
Если вы работаете с Laravel, настройте поддержку Blade-шаблонов:
- Убедитесь, что расширение Laravel Blade Snippets установлено.
- Настройте форматирование Blade-шаблонов:
-
Добавьте в
settings.json
:{ "files.associations": { "*.blade.php": "html" }, "[blade]": { "editor.formatOnSave": true, "editor.defaultFormatter": "junstyle.php-cs-fixer" } }
-
Если вы используете Laravel Pint, он автоматически форматирует Blade-шаблоны. Убедитесь, что в
.php-cs-fixer.dist.php
или конфигурации Pint включена поддержка Blade.
-
Для удобства можно настроить горячие клавиши для выполнения линтинга или форматирования вручную:
-
Откройте панель команд (
Ctrl + Shift + P
) и выберите "Preferences: Open Keyboard Shortcuts (JSON)". -
Добавьте свои сочетания клавиш, например:
[ { "key": "ctrl+alt+l", "command": "phpcs.fix", "when": "editorTextFocus && editorLangId == 'php'" }, { "key": "ctrl+alt+f", "command": "editor.action.formatDocument", "when": "editorTextFocus && editorLangId == 'php'" } ]
Ctrl+Alt+L
— запуск автоматического исправления PHP_CodeSniffer.Ctrl+Alt+F
— запуск форматирования документа.
Чтобы минимизировать отклонение коммитов из-за ошибок линтинга, убедитесь, что VS Code работает в связке с Git хуками (например, настроенными через husky
, если вы используете его, или через стандартные Git хуки). Если вы настроили автоматическое исправление при сохранении, большинство ошибок будет исправлено до того, как вы сделаете коммит.
-
Настройте Git хук
pre-commit
для запускаphpcs
иphp-cs-fixer
:-
Создайте файл
.git/hooks/pre-commit
(или используйтеhusky
, если он настроен). -
Добавьте в него:
#!/bin/sh ./vendor/bin/php-cs-fixer fix ./vendor/bin/phpcs if [ $? -ne 0 ]; then echo "Linting failed, commit aborted" exit 1 fi
-
Сделайте файл исполняемым (если вы работаете в Windows, используйте Git Bash или WSL для выполнения этой команды):
chmod +x .git/hooks/pre-commit
-
-
Проверьте, что при сохранении файлов в VS Code ошибки исправляются автоматически:
- Откройте PHP-файл, добавьте код с ошибками (например, неправильное форматирование или нарушение стандарта PSR-12).
- Нажмите
Ctrl + S
(сохранить) и убедитесь, что код форматируется, а ошибки исправляются.
Если что-то работает не так, вот несколько шагов для устранения неполадок:
-
Форматирование не работает при сохранении:
- Убедитесь, что PHP CS Fixer установлен и доступен в PATH (
./vendor/bin/php-cs-fixer --version
). - Проверьте, что в настройках VS Code указан правильный путь к исполняемому файлу (
php-cs-fixer.executablePath
). - Убедитесь, что опция
editor.formatOnSave
включена.
- Убедитесь, что PHP CS Fixer установлен и доступен в PATH (
-
Линтинг не показывает ошибки в редакторе:
- Убедитесь, что PHP_CodeSniffer установлен и доступен в PATH (
./vendor/bin/phpcs --version
). - Проверьте, что в настройках VS Code указан правильный путь к исполняемому файлу (
phpcs.executablePath
). - Перезапустите сервер PHP_CodeSniffer: нажмите
Ctrl + Shift + P
, выберите "PHP CodeSn
- Убедитесь, что PHP_CodeSniffer установлен и доступен в PATH (