Дополнение кода в Laravel 4/5
Плагин для использования возможностей 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