Дополнение кода в Laravel 4/5

Категория: Laravel

Плагин для использования возможностей Code Completion laravel-ide-helper уже стал пакетом де-факто при использовании фреймворка Laravel.

Без этого плагина не работает:

  • Code Completion методов фасадов
  • Навигация по строковым названиям роутов и шаблонов (навигация по сервисам работает за счет PhpStorm плагина)
  • Навигация по методам сервиса зарегистрированного сервис-провайдером

Добавить определение и дополнение методов для базовых фасадов в Laravel 4, можно просто сохранив уже сгенерированый PHPDoc файл - _ide_helper.php в корне проекта. Для улучшения возможностей дополнения кода, подключите пакет barryvdh/laravel-ide-helper, который также позволит генерировать документацию (блоки комментариев) для ваших моделей, фасадов и хелперов.

Установка и настройка laravel-ide-helper

Установка для Laravel 4.x

Подключение пакета barryvdh/laravel-ide-helper:

composer require --dev "barryvdh/laravel-ide-helper: 1.*"

Регистрация пакета в файле app/config/app.php в секции providers:

'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',

Для автоматического обновление документации при обновлении зависимостей проекта - пропишите команду генерации в секцию post-update-cmd файла composer.json:

"post-update-cmd": [
  "php artisan clear-compiled",
  "php artisan ide-helper:generate -M",
  "php artisan optimize"
],

Установка для Laravel 5.x

Подключение пакета barryvdh/laravel-ide-helper:

composer require --dev barryvdh/laravel-ide-helper

Регистрация пакета в файле  config/app.php в секции providers:

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

Для автоматического обновление документации при обновлении зависимостей проекта - пропишите команду генерации в секцию post-update-cmd файла composer.json:

"post-update-cmd": [
  "Illuminate\\Foundation\\ComposerScripts::postUpdate",
  "php artisan ide-helper:generate",
  "php artisan ide-helper:meta",
  "php artisan optimize"
]
Примечание

Если вы не используете БД и вас достала ошибка: Could not determine driver/connection for DB... SQLSTATE[28000] [1045] Access denied for user... - запустите генерацию документации с опцией -M. Этим параметром мы указываем использовать SQLite Memory, а для него не нужны ни какие настройки доступа:

php artisan ide-helper:generate -M

Уберите опцию -M, если у вас настроено соединение с БД.

Для генерации документации в файл _ide_helper.php вручную - выполните:

php artisan clear-compiled && php artisan ide-helper:generate -M

Или запустите скрипт композера:

composer run-script post-update-cmd

Использование laravel-ide-helper

Документирование свойств моделей

Требуется установить пакет:

composer require --dev doctrine/dbal

Для файла документации моделей _ide_helper_models.php с описанием свойств модели и дополнительных методов фильтрации выполните:

php artisan ide-helper:models --nowrite
Примечание

При генерации файла _ide_helper_models.php документация из блока комментариев класса модели будет добавлена к сгенерированной документации. Но, использую отдельный файл документации, вы столкнетесь с проблемой инспекции кода своей IDE и ошибкой: "Multiple definitions exist for class YourModel" или "Other declaration of class Model exist at _ide_helper_models".

Решения этой проблемы все еще нет.. Голосуемhttps://youtrack.jetbrains.com/issue/WI-17646

Вы можете лишь подавить эту ошибку: Settings » Inspections » PHP » Undefined » Undefined class » Don't report multiple class declaration potential problems.

Или указать IDE не инспектировать отдельный класс:

/** @noinspection PhpUndefinedClassInspection */

Для этого можно поставить курсор внутри класса модели или на ее имени, жмем Alt+Enter → Inspection options → Supress for statement. Хотя, для моделей сторонних библиотек такой способ не особо хорош.

Для генерации блока комментариев непосредственно в классах моделей выполните:

php artisan ide-helper:models --write
Примечание

При генерации PhpDoc комментариев в класс модели существующая документация будет сохранена. Также останутся незатронутыми описания свойств.

Вы можете указать определенные модели для которых нужно сгенерировать документацию:

php artisan ide-helper:models User "Api\Post" --nowrite

Также вы можете документировать необходимые свойства и методы моделей вручную. Пример:

/**
 * @property  string  $title  Описание свойства
 * @property  \Illuminate\Database\Eloquent\Collection|\Roles[]  $roles
 * @property  \Carbon\Carbon  $created_at
 * @property  \Carbon\Carbon  $updated_at
 *
 * @method static \User firstOrFail(array $columns=[])
 * @method static \Illuminate\Support\Collection|\User findOrFail(mixed $id, array $columns=['*'])
 * @method static \User whereName(string $username)
 */
class User extends Eloquent {}

Расширенная конфигурация

Для расширенной конфигурации генератора документации _ide_helper необходимо опубликовать конфиг пакета:

php artisan config:publish barryvdh/laravel-ide-helper

Опции конфигурации

include_helpers
Генерировать ли документацию для функций-хелперов в файл _ide_helper.php. По умолчанию false, т.к. PhpStorm и так предоставляет возможность использовать дополнения кода для helper'ов (http://laravel.com/docs/4.2/helpers).
extra
Указать дополнительные классы, методы которых будут добавлены к зарегистрированным фасадам (aliases из файла app/config/app.php).
magic
Этот параметр используется для подмены методов фасада собственными. Применимо только к фасадам описанным в секции aliases файла app/config/app.php.

Документирование кастомных фасадов

Чтобы явно указать интерфейсы определенных классов (если laravel-ide-helper не удается определить класс фасада) - нужно опубликовать конфиг пакета laravel-ide-helper. И прописать нужные классы и/или их интерфейсы в секции extra конфиг-файла app/config/packages/barryvdh/laravel-ide-helper/config.php. 

Важно!

Чтобы генерировалась документация для кастомных фасадов - нужно прописать их в секцию aliases в app/config/app.php, а для этого ваши фасады должны находится в собственном namespace. Для изучения подробностей можно полистать обсуждение этой темы с автором - https://github.com/barryvdh/laravel-ide-helper/issues/51.

#code completion, #autocomplete

категория: Laravel