Настройка IDE (PhpStorm) для работы с Joomla

Подробно описываем настройку PhpStorm для работы с Joomla: от создания проекта и интеграции до развёртывания и сборки расширения.

Итак, мы подготовились и готовы начать разработку расширения.

Интеграция с Joomla

Первый шаг - установка Joomla. Самую последнюю версию мы всегда можем скачать с сайта Joomla! Downloads.

Разработку мы будем вести отдельно от установленной Joomla. Тем не менее Joomla необходима нам для развёртывания расширения (все изменения, которые мы будем вносить в процессе разработки, будут загружены на наш локальный или удалённый сервер), что позволит нам тестировать и отлаживать наше расширение. Кроме того, установленная Joomla будет являтся источником для автоподстановки во время написания кода.

В нашем примере Joomla локально установлена в директорию H:\OSPanel\domains\jpathru и доступна по адресу http://jpathru.local, а удалённо (на виртуальном сервере) в директорию /var/www/html/jpathru.remote и доступна по адресу http://jpathru.remote.

Переходим к созданию проекта в PhpStorm.

Создание проекта

Интеграция с Joomla начинается сразу же при создании проекта, когда мы жмем Create Project:

Стартовое окно

В окне создания проекта выбираем слева Joomla! Integration, а справа указываем расположение проекта, путь до установки Joomla, путь до файла конфигурации Joomla и тип проекта (выбираем Joomla! Component):

Окно создания проекта

Нажимаем Create и PhpStorm создаст проект с предустановленным каркасом компонента:

При этом он тут же попросит поставить поддержку Joomla DocBlock Templates:

Joomla DocBlock Templates

Joomla DocBlock Templates позволяют автоматически заполнять каркас описания классов и методов в стиле Joomla.

Каркас несомненно сократит время начальной разработки, но в рамках этого руководства мы остановимся на более лаконичном варианте:

Дерево компонента JPathRu

Если вдруг мы захотим вернуться к настройке интеграции Joomla, то сделать это довольно просто. Заходим в Settings и пишем в поиске joomla - откроется окно интеграции Joomla:

Окно настроек интеграции с Joomla

База данных

Для поддержки базы данных PhpStorm использует файл конфигурации Joomla. Это дает возможность использовать дополнительные функции в редакторе, такие как соединение с базой данных или автоподстановку для конструктора запросов JDatabaseQuery.

Создание соединения

Для создания соединения с базой данных необходимо настроить источник данных (Data Source):

  1. Открываем окно инструмента базы данных (Database Tool Window).
  2. Нажимаем на значок +, чтобы открыть меню.
  3. Выбераем параметр Import from sources...
  4. Откроется окно Data Source and Drivers:
    Окно Data Source and Driver
  5. На вкладке General все данные должны быть предзаполнены настройками из файла конфигурации Joomla.
  6. Задаём название источнику данных или оставляем по умолчанию joomla.datasource.
  7. Если мы видим надпись Download missing driver files, то жмем на Download и недостающие драйвера будут скачаны автоматически.
  8. Нажимаем Test Connection, чтобы проверить правильность всех данных.
  9. Если появилась ошибка, связанная с server time zone, то необходимо настроить временную зону:
    Ошибка server time zone
    • Заходим в иконку Open Server > Дополнительно > Конфигурация > MySQL:
      Настройки Open Server Panel
    • Откроется файл настроек.
    • Добавляем в раздел [mysqld] настройку default_time_zone='+00:00':
      Файл настроек MySQL
    • Сохраняем файл и перегружаем Open Server.
    • Нажимаем Test Connection
  10. Должна появится надпись об успешном соединении:
    Сообщение об успешном соединении с базой данных
  11. Жмем ОК, чтобы сохранить источник данных.
  12. В окне базы данных доступна наша база данных:
    Список таблиц базы данных

Настройка SQL диалекта

Настройка SQL диалекта поможет PhpStorm работать с языком запросов и выполнять автоподстановку. Заходим в Settings и пишем в поиске dialects - откроется окно SQL Dialects:

Окно настроек SQL Dialects

Так как мы работаем с MySQL, то в настройке Project SQL Dialect выбираем MySQL. Если вы чаще всего работаете MySQL, то такую же настройку можно установить и для Global SQL Dialect.

Работа в редакторе

Теперь, когда мы настроили источник данных и диалект, PhpStorm начнёт понимать конструктор запросов JDatabaseQuery и автоматически выполнять подстановку при создании запросов.

Давайте посмотрим на этот запрос из компонента Баннеры:

$query = $db->getQuery(true)
    ->select('MAX(ordering) as ' . $db->quoteName('max') . ', catid')
    ->select('catid')
    ->from('#__banners')
    ->group('catid');
$db->setQuery($query);

Как показано на скриншоте ниже, слово cat было набрано, а параметры показаны во всплывающем окне:

Автоподстановка JDatabaseQuery

Совпадения отображаются фиолетовым цветом. Выберите catid из списка и нажмите Enter - имя будет дозаполнено.

Такая же автоподстановка работает и для таблиц:

Автоподстановка для таблиц

Мы также можем напрямую переходить от запроса к таблице или полю. Когда курсор наведен на catid в коде ->select('catid'), нажимаем CTRL-B / CMD-B, курсор переместится на боковую панель базы данных и выберет поле catid в таблице banners.

Мы можем выполнять запрос напрямую из кода (когда курсор наведён на поле выборки), используя CTRL-Enter / CMD-Enter. Это работает только для тех запросов, которые являются исполняемыми.

Анализатор кода

Анализатор кода необходим для того, чтобы выявлять "плохой" код и следить за тем, чтобы код соответствовал единому стандарту оформления, принятому в Joomla. Подробнее об установке и настройке читайте в официальной документации (на русском) Joomla CodeSniffer.

Развёртывание (deployment)

Для того, чтобы загружать файлы нашего проекта на наш локальный или удалённый сервер, необходимо настроить развёртывание (деплой).

Настройка локального сервера

Начнем настройку развёртывания с локального сервера.

  1. Заходим в Tools > Deployment > Configuration. Откроется окно Deployment.
  2. Нажимаем значок +, выбираем Local or mounted folder:
    Окно Deployment
  3. Задаём название серверу. Например, jpathru.
  4. Жмем ОК, откроется окно настройки развёртывания сервера jpathru:

    Окно настройки развёртывания локльного сервера

  5. На вкладке Connection задаем параметры соединения:

    • Folder: указываем путь до установки Joomla.
    • Web server URL: указываем адрес установки Joomla (не обязательно).

    На вкладке Mappings задаем соответствие (маппинг) путей проекта (Local path) путям на сервере (Deployment path). Например, путь admin в проекте соответствует путю administrator\components\com_jpathru на сервере. Таким образом прописываем все соответствия нашего проекта:

    Параметры соответствия путей (маппинг) локльного сервера

    На вкладке Excluded Paths мы можем указать папку или файлы, которые должны быть исключены из процесса развёртывания.

  6. Жмём ОК, конфигурация завершена.

Теперь при нажатии на значок Deployment нам доступно полное меню развёртывания и мы можем закачивать и скачивать файлы с локального сервера:

Полное меню развёртывания

Мы также можем просматривать файлы сервера через опцию Browse Remote Host, которая открывается в боковой панели:

Окно Browse Remote Host

Закачивать файлы вручную не совсем удобно, поэтому в PhpStorm предусмотрен режим автоматической загрузки измененных файлов. Для настройки этой возможности заходим в Tools > Deployment > Options и в параметре Upload changed files automatically to the default server выбираем опцию On explicit save action (Ctrl + S):

Окно Deployment Options

Теперь при каждом сохранении измененные файлы будут автоматически загружаться на сервер, который назначен сервером по умолчанию.

Настройка удалённого сервера

Настройка развёртывания на удалённый сервер практически идентична локальному. Отличие только в том, что мы будем использовать другой тип соединения.

В нашем случае в качестве удалённого сервера выступает виртуальный сервер.

  1. Заходим в Tools > Deployment > Configuration или через значок Deployment выбираем Configuration.
  2. Нажимаем значок +, выбираем SFTP.
  3. Задаём название серверу. Например, jpathru-remote.
  4. Жмем ОК, откроется окно настройки развёртывания сервера jpathru-remote:

    Окно настройки развёртывания удалённого сервера

  5. На вкладке Connection задаем параметры соединения:

    • Host: указываем адрес установки Joomla.
    • User name: указываем имя пользователя, в нашем случае это root.
    • Authentication: указываем тип аутентификации. Рекомендуем указать Key pair.
    • В появившейся настройке Private key path задаём путь до нашего приватного ключа.
    • Root path: указываем путь до директории установки Joomla.
    • Web server URL: указываем адрес установки Joomla (не обязательно).
    • Нажимем на Test Connection и убеждаемся, что соединение успешно.

    На вкладке Mappings задаем соответствие (маппинг) путей проекта (Local path) путям на сервере (Deployment path) по аналогии с локальным сервером:

    Параметры соответствия путей (маппинг) удалённого сервера
  6. Жмём ОК, конфигурация завершена.

Сборка расширения

Для сборки расширения мы будем использовать Phing. Это достаточно гибкий инструмент, который прост в освоении (основан на PHP), и в то же время достаточно мощный. Он имеет множество встроенных средств и неплохой API. Управлять сборкой мы можем при помощи XML файлов, в которых описываем цели и задачи, выполняемые в процессе сборки.

В сети достаточно руководств по теме Phing, поэтому в качестве примера мы используем простой XML файл, задача которого собрать наше расширение в zip-архив (для тестирования или релиза), который будет годен для установки в Joomla. Создаем в проекте файл build.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<project name="JPathRu" default="make" basedir=".">
    <tstamp>
        <format property="build.date" pattern="%Y-%m-%d" />
    </tstamp>
    <property name="build" value="build" />
    <property name="prefix" value="com" />
    <property name="extension" value="jpathru" />
    <property name="version" value="0.0.1" />
    <target name="make-dev" description="Builds the extension release package for development testing.">
        <echo msg="Deleting old development build." />
        <delete quiet="yes">
            <fileset dir="${build}">
                <include name="${prefix}_${extension}_dev.zip" />
            </fileset>
        </delete>
        <echo msg="Making the development ${extension} package." />
        <mkdir dir="${build}" />
        <zip destfile="${build}/${prefix}_${extension}_dev.zip">
            <fileset dir=".">
                <include name="admin/**" />
                <include name="site/**" />
                <include name="${extension}.*" />
            </fileset>
        </zip>
    </target>
    <target name="make" description="Builds the extension release package for a version.">
        <echo msg="Making the ${extension} package for version ${version}." />
        <mkdir dir="${build}" />
        <zip destfile="${build}/${prefix}_${extension}_${version}.zip">
            <fileset dir=".">
                <include name="admin/**" />
                <include name="site/**" />
                <include name="LICENSE" />
                <include name="${extension}.*" />
            </fileset>
        </zip>
    </target>
</project>

Теперь жмем правой кнопкой мышки на файле и выбираем опцию Add as a Phing Build File. В боковой панели появится окно работы с Phing.

Окно работы с Phing

Пробуем запустить команду make-dev. PhpStorm откроет окно Phing с предупреждением о том, что не прописан путь до исполняемого файла Phing:

Окно Phing

Жмем на надпись Click here to download the latest from phing.info и указываем путь, по которому мы хотим сохранить исполняемый файл. PhpStorm автоматически загрузит необходимый файл и пропишет путь. Жмем OK и PhpStorm запустит выполнение команды:

php.exe H:\phing-latest.phar -f "H:/My documents/My Projects/jpathru/build.xml" make-dev
Buildfile: H:\My documents\My Projects\jpathru\build.xml
JPathRu > make-dev:
    [echo] Deleting old development build.
    [echo] Making the development jpathru package.
    [zip] Building zip: H:\My documents\My Projects\jpathru\build\com_jpathru_dev.zip
BUILD FINISHED
Total time: 0.1345 seconds
Build finished at 01.06.2019 21:19 with exit code 0.

Git

После того, как проект создан и настроен, можно добавлять его в git. Сначала в проекте создаём файл .gitignore и прописываем в нём папки, которые git должен игнорировать:

.idea
build
  • .idea - папка с настройками проекта PhpStorm;
  • build - папка, в которую складываются сборки расширения.

Далее открываем терминал в PhpStorm и выполняем команды:

git init
git add .
git commit -m "Add project files"

PhpStorm автоматически поймёт, что проект находится под git, что даст нам возможность работать с git непосредственно из PhpStorm, без использования консольных команд. Подробонее о работе с Git в PhpStorm читайте в официальной документации.

Итог

Вот мы и добрались до того момента, когда мы практически готовы начать полноценную разработку. Почему практически? Потому что разработка будет неполной без отладки кода. Об этом мы поговорим в нашей следующей части (пока в процессе написания), которая будем посвещена настройке среды и PhpStorm для отладки расширений.

© 2019 BinaryCraft. Все права защищены.