Xenforo Инструменты разработки

GOLO

Administrator
Администратор
Premium
Регистрация
31.07.2017
Сообщения
61
Реакции
24
Баллы
8
Страна
Sweden
Native language | Родной язык
Русский
XF2 предоставляет разработчикам ряд встроенных инструментов, которые вы можете использовать для ускорения разработки дополнений, и мы рассмотрим некоторые из них ниже.


Режим отладки​


Режим отладки может быть включен в Вашем config.php, что позволит вам получить доступ к определенным инструментам разработки в Admin CP (таким как создание маршрутов, разрешений, административная навигация и т. д.), А также позволит выводить в нижней части каждой страницы, в котором подробно указано, сколько времени потребовалось для обработки страницы, сколько запросов было выполнено для отображения страницы и сколько памяти было использовано. Всплывающая подсказка, содержащая информацию о текущем контроллере, действии и имени шаблона, доступна при наведении курсора. вы также можете щелкнуть вывод времени, и это даст вам подробное представление о том, какие именно запросы выполнялись, и трассировку стека, которая привела к выполнению этого запроса.


вы можете включить режим отладки, добавив следующее в config.php:

Код:
$config['debug'] = true;


Включение режима разработки​


Режим разработки - это специальный режим, активированный в Вашем файле config.php, который заставит XF автоматически записать Ваши файлы разработки в ваш каталог _output. Этот режим должен быть включен, чтобы было разрешено редактирование шаблона файловой системы. Поскольку режим разработки будет записывать файлы в Вашу файловую систему, важно убедиться, что у вас есть соответствующие права доступа к файлам. Это может варьироваться в зависимости от среды, но типичная конфигурация должна гарантировать, что для любого дополнения, над которым вы работаете, у вас есть каталог _output, установленный chmod 0777. Например, если вы работаете над дополнением с идентификатором Demo, его результаты разработки будут записаны в src/addons/Demo/_output, и поэтому этот каталог должен быть полностью доступен для записи.


Включение режима разработки также автоматически включает .


Чтобы включить режим разработки, добавьте следующие строки в ваш файл config.php:

Код:
$config['development']['enabled'] = true;
Код:
$config['development']['defaultAddOn'] = 'SomeCompany/MyAddOn';


Значение defaultAddOn является необязательным, но его добавление автоматически заполнит указанное дополнение в XF Admin CP при создании нового контента, который будет связан с дополнением.


В дополнение к вышесказанному вам может потребоваться добавить некоторую дополнительную конфигурацию, особенно если вы используете более одной установки XF.

Код:
$config['enableMail'] = false;


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


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

Код:
$config['cookie']['prefix'] = 'anything_';


Если вы используете две или более установки XF на одном домене, у вас могут возникнуть проблемы с перезаписью файлов cookie, что вызвано установками, использующими один и тот же префикс cookie. Поэтому рекомендуется менять префикс файлов cookie для каждой установленной Вами установки XF. Без этого вы столкнетесь с проблемами, например, с выходом из одной установки XF при входе в другую.


Предотвращение частого выхода из системы для пользователей с динамическим IP​


Сессии XenForo обычно привязаны к Вашему IP-адресу. Если ваш IP-адрес динамический или вы используете VPN, прокси или балансировщик нагрузки, вы можете часто выходить из системы. вы можете предотвратить это, добавив в файл src/config.php следующее:

Код:
$c->extend('session', function(\XF\Session\Session $session)
{
   $session->setConfig([
        'ipv4CidrMatch' => 0,
        'ipv6CidrMatch' => 0
    ]);
   return $session;
});


Warning
Никогда не применяйте приведенный выше код к конфигурации действующего/продакшен сайта.

Команды разработки​


XF 2.0 поставляется с рядом общих команд CLI для разработки и дополнений, которые призваны помочь вам разрабатывать более эффективно или даже, возможно, автоматизировать/сценарий для некоторых общих процессов.


В этом разделе мы рассмотрим некоторые общие инструменты и объясним, что они делают.


Специальные команды дополнений​


Создание нового дополнения​


Код:
$ php cmd.php xf-addon:create

Команда xf-addon:create предназначена для первоначальной настройки и создания нового дополнения. После запуска все, что вам нужно, это ответить на несколько основных вопросов:


  • Введите идентификатор для этого дополнения
  • Введите название
  • Введите идентификатор версии (например, 1000010)
  • Введите строку версии (например, 1.0.0 Alpha)

Затем вам будет предоставлена возможность создать дополнение и записать его файл addon.json, а также задать несколько вопросов о том, хотите ли вы добавить файл Setup.php.


Экспорт _data .XML файлов​


Код:
$ php cmd.php xf-addon:export [addon_id]

Эту команду вы будете использовать для экспорта всех данных дополнения в файлы XML внутри каталога _data. Он экспортирует данные из того, что в настоящее время находится в базе данных (а не из выходных файлов разработки).


Поднимите версию дополнения​


Код:
$ php cmd.php xf-addon:bump-version [addon_id] --version-id 1020370 --version-string 1.2.3

Note
Если Ваша строка версии содержит пробелы, вам нужно будет заключить ее в кавычки.

Эта команда принимает идентификатор дополнения для Вашего дополнения, идентификатор новой версии и строку новой версии. Это позволяет вам обновить версию дополнения за один шаг, без необходимости выполнять обновления и перестройку самостоятельно. Приведенные выше параметры являются необязательными, и если они не указаны, вам будет предложено их ввести. Если вы укажете только идентификатор версии, мы попытаемся автоматически вывести из него правильную строку версии, если она соответствует нашему . Когда команда завершится, она автоматически обновит файл addon.json и базу данных, указав правильную информацию о версии.


Синхронизируйте свой addon.json с базой данных​


Код:
$ php cmd.php xf-addon:sync-json [addon_id]

Иногда вы можете предпочесть отредактировать файл JSON напрямую, указав определенные детали. Это может быть версия, новая иконка, изменение названия или описания. Такое изменение JSON может привести к тому, что система дополнения будет полагать, что есть отложенные изменения или что дополнение можно обновить. Восстановление или обновление может оказаться разрушительной операцией, если вы еще не экспортировали свои текущие данные. Поэтому рекомендуется запускать эту команду как способ импорта этих данных, не затрагивая существующие данные.


Валидация Вашего файла addon.json​


Код:
$ php cmd.php xf-addon:validate-json [addon_id]

Если вы хотите проверить, что ваш файл JSON содержит правильное содержимое и в правильном формате, вы можете проверить его. Валидатор проверит, можно ли декодировать контент, что он содержит все правильные обязательные поля (такие как заголовок и идентификатор версии), а также проверит наличие дополнительных ключей (таких как описание и иконка). Если какие-либо ключи отсутствуют, вам будет предложено исправить проблему. Мы также проверяем, есть ли какие-либо неожиданные поля в файле JSON. Они могут быть преднамеренными или представлять собой опечатки. вы можете запустить команду вручную или она будет запущена автоматически при сборке Вашего релиза.


Запустите определенный шаг установки​


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


В этом помогают три команды. Эти команды будут работать только с классами Setup, которые построены с использованием трейта по умолчанию StepRunner.


Запуск шага установки​


Код:
$ php cmd.php xf-addon:install-step [addon_id] [step]

Запуск шага обновления​


Код:
$ php cmd.php xf-addon:upgrade-step [addon_id] [version] [step]

Запуск шага удаления​


Код:
$ php cmd.php xf-addon:uninstall-step [addon_id] [step]

Сборка релиза дополнения​


После того, как вся тяжелая работа сделана, очень жаль, что вам придется пройти через ряд других процессов, прежде чем вы действительно сможете ее выпустить. Даже процесс сбора всех файлов в нужное место и создание ZIP-файла вручную может занять много времени и привести к ошибкам. Мы можем позаботиться об этом автоматически, включая создание файла hashes.json, с помощью одной простой команды.


Код:
$ php cmd.php xf-addon:build-release [addon_id]

Когда вы запустите эту команду, она сначала запустит команду xf-addon:export, а затем соберет все Ваши файлы во временный каталог _build и запишет их в ZIP-файл. Готовый ZIP-файл также будет включать файл hashes.json. Как только ZIP-файл будет создан, он будет сохранен в Вашем каталоге _releases и именем <ADDON ID>-<VERSION STRING>.zip.


Настройка процесса сборки​


Помимо создания ZIP релиза, могут быть дополнительные файлы, которые вы хотите включить в свой ZIP, другие более сложные процессы сборки, которые вы хотите запустить, такие как минимизация или объединение JS или выполнение определенных команд оболочки. Обо всем этом можно позаботиться в Вашем файле build.json. Это типичный файл build.json:

Код:
{
    "additional_files": [
        "js/demo/portal"
    ],
    "minify": [
        "js/demo/portal/a.js",
        "js/demo/portal/b.js"
    ],
    "rollup": {
        "js/demo/portal/ab-rollup.js": [
            "js/demo/portal/a.min.js",
            "js/demo/portal/b.min.js"
        ]
    },
    "exec": [
        "echo '{title} version {version_string} ({version_id}) has been built successfully!' > 'src/addons/Demo/Portal/_build/built.txt'"
    ]
}


Если у вас есть ресурсы, такие как JavaScript, которые необходимо обслуживать вне каталога дополнения, вы можете указать процессу сборки копировать файлы или каталоги, используя массив additional_files в build.json. Во время разработки не всегда возможно хранить файлы вне каталога дополнения, поэтому, если вы предпочитаете, вы можете вместо этого хранить файлы в каталоге дополнения _files. При копировании дополнительных файлов мы сначала проверим их.


Если вы отправляете некоторые файлы JS вместе с дополнением, вы можете минифицировать эти файлы по соображениям производительности. вы можете указать, какие файлы вы хотите минифицировать, прямо внутри Вашего build.json. вы можете перечислить их в виде массива или просто указать его как '*', что минифицирует все в Вашем каталоге js, если этот путь содержит файлы JS после копирования дополнительных файлов в сборку. Любые минифицированные файлы будут автоматически иметь суффикс .min.js вместо .js, а исходные файлы все еще будут в пакете.


Возможно, вы предпочтете объединить несколько файлов JS в один файл. Если вы это сделаете, вы можете использовать массив rollup, чтобы определить это. Ключ - это получившееся объединенное имя файла, а элементы в этом массиве - это пути к файлам JS, которые будут объединены в один файл.


Наконец, у вас могут быть определенные процессы, которые необходимо запустить непосредственно перед сборкой и окончательной доработкой пакета. Это может быть любая комбинация вещей. В конечном счете, если это команда, которую можно запустить из оболочки (включая сценарии PHP), вы можете указать ее здесь. Приведенный выше пример, конечно, бесполезен, но он, по крайней мере, демонстрирует, что можно использовать определенные заполнители. Эти заполнители заменяются скалярными значениями, которые вы можете получить из объекта XF\AddOn\AddOn, который обычно представляет собой любое значение, доступное в файле addon.json или в объекте AddOn.


Команды разработки​


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


Чтобы использовать любую из этих команд, у вас должен быть включен в Вашем файле config.php.


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

Импорт результатов разработки​


Код:
$ php cmd.php xf-dev:import --addon [addon_id]

Выполнение этой команды импортирует все выходные файлы разработки из каталога дополнения _output в базу данных.


Экспорт результатов разработки​


Код:
$ php cmd.php xf-dev:export --addon [addon_id]

Это экспортирует все данные, которые в настоящее время связаны с Вашим дополнением в базе данных, в файлы в Вашем каталоге _output.


Отладка кода​


Должна быть возможность настроить ваш любимый инструмент отладчика (XDebug, Zend Debugger и т. д.) для работы с XF2. Хотя иногда отладочный код может быть столь же рудиментарным, как и просто быстрое определение того, какое значение (или тип значения) хранится в переменной в данный момент времени.


Дамп переменной​


В PHP, конечно же, есть встроенный инструмент, позволяющий справиться с этим. Скорее всего, вы знаете его как var_dump(). XF поставляется с двумя заменами для этого:

Код:
\XF::dump($var);
Код:
\XF::dumpSimple($var);


Простая версия в основном просто выгружает значение переменной в виде обычного текста. Например, если вы просто используете его для выгрузки значения массива, вы увидите вывод вверху страницы, подобный этому:

Код:
array(2) {
  ["user_id"] => int(1)
  ["username"] => string(5) "Admin"
}


Фактически это тот же результат, что и стандартный var_dump, но немного измененный для удобства чтения и заключенный в теги <pre>, чтобы гарантировать сохранение пробелов при рендеринге.


Альтернативой на самом деле является компонент VarDumper из проекта Symfony. Он выводит HTML, CSS и JS для создания более функционального и потенциально более удобного для чтения вывода. Он позволяет свернуть определенные разделы, а для определенных значений, которые могут выводить значительный объем данных, таких как объекты, он может автоматически свернуть эти разделы.
 
197 138Темы
634 108Сообщения
3 618 349Пользователи
bullj5112Новый пользователь
Верх