Skip to content

Instantly share code, notes, and snippets.

@5kr1p7
Created March 7, 2025 09:36
Show Gist options
  • Save 5kr1p7/05d7accf89c1d3ef569d1b74cab9af68 to your computer and use it in GitHub Desktop.
Save 5kr1p7/05d7accf89c1d3ef569d1b74cab9af68 to your computer and use it in GitHub Desktop.

Да, в экосистеме PHP, включая фреймворки Laravel и Yii, существуют инструменты, аналогичные Prettier и ESLint, которые помогают форматировать код, проверять его на ошибки и поддерживать единый стиль. Основные инструменты для PHP — это PHP CS Fixer (форматирование) и PHP_CodeSniffer (линтинг). Для более современной и мощной проверки стиля и ошибок также используется Psalm или PHPStan (статический анализ).

Ниже приведена подробная инструкция по настройке этих инструментов в PHP-проекте (Laravel, Yii) и их интеграции с VS Code, включая автоматическое форматирование и линтинг при сохранении.


1. Инструменты для PHP, аналогичные Prettier и ESLint

Форматирование (аналог Prettier):

  • PHP CS Fixer: Это популярный инструмент для автоматического форматирования PHP-кода в соответствии с заданными стандартами кодирования (например, PSR-12, Laravel, Symfony и т.д.). Он исправляет отступы, пробелы, порядок импортов и многое другое.
  • Prettier с плагином для PHP: Prettier также поддерживает PHP через плагин prettier-plugin-php, но он менее популярен в PHP-сообществе по сравнению с PHP CS Fixer, так как последний более настраиваемый и лучше интегрируется с PHP-фреймворками.

Линтинг (аналог ESLint):

  • PHP_CodeSniffer (phpcs): Это инструмент для проверки стиля кода (code sniffing). Он проверяет код на соответствие стандартам кодирования, таким как PSR-2, PSR-12, или кастомным правилам. Также включает инструмент phpcbf для автоматического исправления ошибок.
  • Psalm: Инструмент статического анализа для PHP, который проверяет код на ошибки, типы и потенциальные баги. Очень популярен в Laravel-сообществе.
  • PHPStan: Еще один инструмент статического анализа, аналогичный Psalm, но с немного другим подходом. Часто используется в Yii и других проектах.

2. Установка инструментов

Перед настройкой VS Code установите необходимые инструменты в вашем проекте. Мы будем использовать PHP CS Fixer для форматирования и PHP_CodeSniffer для линтинга, так как они наиболее популярны и хорошо интегрируются с Laravel и Yii.

2.1. Убедитесь, что PHP установлен

Убедитесь, что у вас установлен PHP (скачать можно с php.net). Проверьте версию:

php -v

2.2. Установите Composer

Composer — это менеджер зависимостей для PHP, который понадобится для установки инструментов. Убедитесь, что он установлен (скачать можно с getcomposer.org). Проверьте версию:

composer --version

2.3. Установите PHP CS Fixer

Установите PHP CS Fixer как зависимость разработки в вашем проекте:

composer require --dev friendsofphp/php-cs-fixer

После установки вы сможете запускать PHP CS Fixer через ./vendor/bin/php-cs-fixer.

2.4. Установите PHP_CodeSniffer

Установите PHP_CodeSniffer как зависимость разработки:

composer require --dev squizlabs/php_codesniffer

После установки вы сможете запускать phpcs (для проверки) и phpcbf (для исправления) через ./vendor/bin/phpcs и ./vendor/bin/phpcbf.

2.5. Настройте проект

Для использования PHP CS Fixer и PHP_CodeSniffer создайте файлы конфигурации в корне проекта.

  1. Настройка 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, см. ниже).

  2. Настройка 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>
    • Этот файл указывает, какие файлы проверять и какие стандарты использовать.

2.6. Настройка Laravel Pint (для Laravel, опционально)

Если вы работаете с Laravel, вы можете использовать Laravel Pint — официальный инструмент форматирования от Laravel, который основан на PHP CS Fixer, но с предустановленными правилами для Laravel. Установите его:

composer require --dev laravel/pint

После установки вы сможете запускать Pint через ./vendor/bin/pint.

2.7. Добавьте скрипты в composer.json

Для удобства добавьте команды для форматирования и линтинга в 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).


3. Настройка VS Code для PHP

Теперь настроим VS Code для автоматического форматирования и линтинга при сохранении, а также для отображения ошибок в реальном времени.

3.1. Установите расширения для PHP

  1. Откройте панель расширений в VS Code (Ctrl+Shift+X).
  2. Установите следующие расширения:
    • 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 (опционально).

После установки перезапустите VS Code, чтобы активировать расширения.

3.2. Настройте форматирование при сохранении

Чтобы код автоматически форматировался с помощью PHP CS Fixer (или Laravel Pint) при сохранении:

  1. Откройте настройки VS Code (Ctrl + ,).

  2. Найдите настройку Editor: Format On Save и включите ее (если еще не включена).

  3. Настройте PHP CS Fixer как форматтер:

    • Откройте файл настроек VS Code в формате JSON:
      • Нажмите Ctrl + Shift + P, введите "Preferences: Open Settings (JSON)" и выберите этот пункт.
      • Или откройте файл вручную: C:\Users\<ВашПользователь>\AppData\Roaming\Code\User\settings.json (в Windows).
  4. Добавьте следующие настройки в 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
    }

3.3. Настройте линтинг с помощью PHP_CodeSniffer

Чтобы ошибки линтинга отображались в реальном времени и автоматически исправлялись при сохранении с помощью PHP_CodeSniffer:

  1. Убедитесь, что PHP_CodeSniffer установлен (см. шаг 2.4 выше).

  2. Настройте расширение 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 и включите, чтобы автоматически исправлять ошибки при сохранении.
  3. Добавьте настройки в 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 при сохранении.

3.4. Настройте отображение ошибок в реальном времени

Чтобы ошибки линтинга отображались в редакторе в реальном времени (подчеркивание красным, подсказки и т.д.):

  1. Убедитесь, что расширение PHP_CodeSniffer активно:
    • Внизу в статус-баре VS Code должен быть значок PHP_CodeSniffer (если он не отображается, проверьте, включено ли расширение).
  2. Убедитесь, что PHP Intelephense активно:
    • PHP Intelephense предоставляет дополнительную диагностику и автодополнение. Убедитесь, что оно включено в настройках:

      • Откройте настройки (Ctrl + ,), найдите "intelephense" и убедитесь, что расширение активно.
    • Добавьте в settings.json:

      {
        "intelephense.diagnostics.enable": true,
        "intelephense.format.enable": false // Отключаем форматирование Intelephense, чтобы избежать конфликтов
      }

3.5. Настройте Blade-шаблоны (для Laravel, опционально)

Если вы работаете с Laravel, настройте поддержку Blade-шаблонов:

  1. Убедитесь, что расширение Laravel Blade Snippets установлено.
  2. Настройте форматирование 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.

3.6. Настройте горячие клавиши (опционально)

Для удобства можно настроить горячие клавиши для выполнения линтинга или форматирования вручную:

  1. Откройте панель команд (Ctrl + Shift + P) и выберите "Preferences: Open Keyboard Shortcuts (JSON)".

  2. Добавьте свои сочетания клавиш, например:

    [
      {
        "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 — запуск форматирования документа.

3.7. Проверьте интеграцию с Git хуками

Чтобы минимизировать отклонение коммитов из-за ошибок линтинга, убедитесь, что VS Code работает в связке с Git хуками (например, настроенными через husky, если вы используете его, или через стандартные Git хуки). Если вы настроили автоматическое исправление при сохранении, большинство ошибок будет исправлено до того, как вы сделаете коммит.

  1. Настройте 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
  2. Проверьте, что при сохранении файлов в VS Code ошибки исправляются автоматически:

    • Откройте PHP-файл, добавьте код с ошибками (например, неправильное форматирование или нарушение стандарта PSR-12).
    • Нажмите Ctrl + S (сохранить) и убедитесь, что код форматируется, а ошибки исправляются.

3.8. Решение возможных проблем

Если что-то работает не так, вот несколько шагов для устранения неполадок:

  1. Форматирование не работает при сохранении:

    • Убедитесь, что PHP CS Fixer установлен и доступен в PATH (./vendor/bin/php-cs-fixer --version).
    • Проверьте, что в настройках VS Code указан правильный путь к исполняемому файлу (php-cs-fixer.executablePath).
    • Убедитесь, что опция editor.formatOnSave включена.
  2. Линтинг не показывает ошибки в редакторе:

    • Убедитесь, что PHP_CodeSniffer установлен и доступен в PATH (./vendor/bin/phpcs --version).
    • Проверьте, что в настройках VS Code указан правильный путь к исполняемому файлу (phpcs.executablePath).
    • Перезапустите сервер PHP_CodeSniffer: нажмите Ctrl + Shift + P, выберите "PHP CodeSn
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment