noname
- Регистрация
- 06.02.25
- Сообщения
- 2,575
- Основные моменты
- 4
- Решения
- 9
- Реакции
- 480
- Баллы
- 83
Инициатор темы
- Инструктор
- Автор темы
- Администратор
- Модератор
- Персонал форума
- #1
Одной из вещей, которую мы решили сделать скорее, чем позже, было изменение нашей библиотеки базы данных с mysqli на PDO. Как мы поговорим позже, PDO помогает нам легче писать новые адаптеры баз данных, что становится полезным для поддержки внешних баз данных для таких вещей, как импорт или, полезно для сторонних разработчиков, которые могут захотеть интегрироваться с локально размещенными внешними базами данных. PDO также, как правило, является стандартом де-факто для PHP на данном этапе. Многие хосты поставляются с включенным PDO по умолчанию, тогда как mysqli часто нужно включать вручную. Мы видели, как это происходило пару раз, когда люди меняли хосты или даже меняли версии, не убедившись, что расширение mysqli включено сначала.
Чтобы иметь возможность установить или обновиться до XenForo 2.4, вам нужно будет убедиться, что PDO доступен с драйвером mysql в вашей среде хостинга.
В PDO также включены некоторые улучшения качества жизни, такие как привязка именованных параметров, например:
Хотя, оглядываясь назад, это может оказаться менее полезным, чем вы могли бы подумать... (подробнее об этом позже).
Собственная поддержка SQLite
SQLite на данный момент является наиболее широко используемой базой данных в мире (на телефонах, встроенных устройствах, в приложениях и т. д.), некоторые даже используют ее в крупномасштабных, высокопроизводительных производственных средах. SQLite также отлично подходит разработчикам благодаря своей распространенности, настройке без конфигурации и переносимости (это всего лишь один файл) с превосходной производительностью на локальных дисках. Несмотря на свою простоту, SQLite полностью соответствует ACID и отличается исключительной надежностью. Он не просто удобен, он надежен на корпоративном уровне.
Для продвинутых разработчиков, особенно тех, у кого есть конвейеры dev ops, SQLite отлично подходит для автоматизированного тестирования — вы можете мгновенно развернуть полный изолированный экземпляр базы данных для каждого тестового запуска. Хотя мы по-прежнему официально рекомендуем MySQL для производства, SQLite для тестирования и разработки чрезвычайно привлекателен, и мы рады предоставить его вам, начиная с XenForo 2.4.
Но что насчет всех существующих запросов в коде?
Совершенно новый конструктор запросов Fluent
Новая база данных означает поддержку другого диалекта базы данных. Но никто не хочет писать запросы к базе данных дважды. На самом деле, писать их один раз немного раздражает. Новый конструктор запросов призван облегчить жизнь. Давайте перепишем запрос, который я переписал ранее, теперь с помощью нового конструктора запросов:
Этот экземпляр конструктора запросов автоматически компилируется в нужный диалект SQL для используемой базы данных. Мы переписали все существующие запросы в программном обеспечении (и официальные дополнения) для использования нового конструктора запросов, включая те, которые сгенерированы Finder и SchemaManager для поддержки SQLite.
Конечно, вам не обязательно его использовать. Вы сможете писать различные запросы напрямую для поддержки как MySQL (как сейчас), так и SQLite или вы сможете вообще забыть о SQLite (хотя это может повлиять на возможность людей использовать ваше дополнение, если они используют SQLite).
Это также открывает дверь для поддержки других баз данных в будущем. Хотя нет никаких непосредственных планов, поддержка MS SQL и PostgreSQL теперь возможна. Любой, кому это может понадобиться прямо сейчас, сможет легко написать собственные адаптеры и классы грамматики для конструктора запросов, чтобы добавить поддержку, если вам это нужно.
Плагин PhpStorm для разработчиков
Посмотреть вложение 7022-997850c0f42d286724c21fd3c62aff08.mov
Отладка запросов
Мы реализовали несколько методов, чтобы помочь разработчикам проверить, какой запрос будет скомпилирован любым конкретным вызовом конструктора запросов для целей отладки.
Мы поддерживаем методы
Говоря об отладке запросов, мы также обновили внешний вид наших отладочных выводов, теперь с улучшенным использованием цветов как в светлом, так и в темном режиме, а также подсветкой синтаксиса и форматированием для запросов к базе данных:
![[aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli [aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli](https://aprodam.ru/data/attachments/8/8815-f23b86c99ec290befd9f6ab4f446b64b.jpg?hash=JeNri5NLpp)
Встроенная поддержка веб-сервера PHP
Поиск подходящей среды для разработки и тестирования может быть сложной задачей. Существует множество продуктов, доступных для разных операционных систем. Иногда бывает сложно найти подходящую для вас, иногда вы можете столкнуться с проблемами после обновлений, или вы однажды включаете свой ноутбук, а ни одна из ваших баз данных недоступна. Мы уже говорили о том, как SQLite может помочь в этом — отсутствие необходимости управлять собственным экземпляром MySQL или MariaDB является огромным преимуществом — но что, если вам не нужно возиться с Nginx или Apache?
Используя встроенный веб-сервер PHP, вы можете быстро развернуть сервер разработки, не касаясь конфигураций веб-сервера или полных сред, таких как Herd, WAMP, MAMP или Docker.
XenForo Development REPL
Добавлена новая команда CLI xf-dev:tinker, предоставляющая REPL (цикл чтения–вычисления–печати) для разработки XenForo. Она построена на превосходной библиотеке Psysh и предоставляет удобную площадку для запуска фрагментов кода, тестирования служб и интерактивного осмотра среды.
REPL предварительно загружен общими переменными, такими как $app, $db, $em и многими другими, которые вы могли (не) ожидать. Вы можете просмотреть полный список с помощью команды ls -l --vars или отключить это поведение с помощью флага --without-vars.
Вы можете использовать опцию --execute, чтобы передать код для непосредственного запуска, что может быть полезно для запуска быстрых одноразовых скриптов, или передать пути к файлам в качестве аргументов для их включения при запуске REPL, что может быть полезно для общего кода настройки. REPL также включает флаг --with-commands, позволяющий вызывать другие команды CLI XenForo в REPL.
Веб-сайт и документация Psysh могут быть полезными ссылками для начала работы с ним:
![[aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli [aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli](https://aprodam.ru/data/attachments/8/8816-1c2e66ee61060916d491d109483eae64.jpg?hash=yBTzcYthyq)
Чтобы иметь возможность установить или обновиться до XenForo 2.4, вам нужно будет убедиться, что PDO доступен с драйвером mysql в вашей среде хостинга.
В PDO также включены некоторые улучшения качества жизни, такие как привязка именованных параметров, например:
PHP:
$activeUsers = \XF::db()->fetchAll("
SELECT *
FROM xf_user AS user
INNER JOIN xf_user_profile AS profile ON
(user.user_id = profile.user_id)
WHERE user.user_state = :user_state
AND user.last_activity > :min_activity
ORDER BY user.last_activity DESC
LIMIT 10
", ['user_state' => 'valid', 'min_activity' => time()]);
Собственная поддержка SQLite
SQLite на данный момент является наиболее широко используемой базой данных в мире (на телефонах, встроенных устройствах, в приложениях и т. д.), некоторые даже используют ее в крупномасштабных, высокопроизводительных производственных средах. SQLite также отлично подходит разработчикам благодаря своей распространенности, настройке без конфигурации и переносимости (это всего лишь один файл) с превосходной производительностью на локальных дисках. Несмотря на свою простоту, SQLite полностью соответствует ACID и отличается исключительной надежностью. Он не просто удобен, он надежен на корпоративном уровне.
Для продвинутых разработчиков, особенно тех, у кого есть конвейеры dev ops, SQLite отлично подходит для автоматизированного тестирования — вы можете мгновенно развернуть полный изолированный экземпляр базы данных для каждого тестового запуска. Хотя мы по-прежнему официально рекомендуем MySQL для производства, SQLite для тестирования и разработки чрезвычайно привлекателен, и мы рады предоставить его вам, начиная с XenForo 2.4.
Но что насчет всех существующих запросов в коде?
Совершенно новый конструктор запросов Fluent
Новая база данных означает поддержку другого диалекта базы данных. Но никто не хочет писать запросы к базе данных дважды. На самом деле, писать их один раз немного раздражает. Новый конструктор запросов призван облегчить жизнь. Давайте перепишем запрос, который я переписал ранее, теперь с помощью нового конструктора запросов:
PHP:
$activeUsers = \XF::query('xf_user AS user')
->join('xf_user_profile AS profile', 'user.user_id', '=', 'profile.user_id')
->where('user.user_state', 'valid')
->where('user.last_activity', '>', time() - 86400)
->orderByDesc('user.last_activity')
->limit(10)
->fetchAll();
Конечно, вам не обязательно его использовать. Вы сможете писать различные запросы напрямую для поддержки как MySQL (как сейчас), так и SQLite или вы сможете вообще забыть о SQLite (хотя это может повлиять на возможность людей использовать ваше дополнение, если они используют SQLite).
Это также открывает дверь для поддержки других баз данных в будущем. Хотя нет никаких непосредственных планов, поддержка MS SQL и PostgreSQL теперь возможна. Любой, кому это может понадобиться прямо сейчас, сможет легко написать собственные адаптеры и классы грамматики для конструктора запросов, чтобы добавить поддержку, если вам это нужно.
Плагин PhpStorm для разработчиков
Посмотреть вложение 7022-997850c0f42d286724c21fd3c62aff08.mov
Отладка запросов
Мы реализовали несколько методов, чтобы помочь разработчикам проверить, какой запрос будет скомпилирован любым конкретным вызовом конструктора запросов для целей отладки.
PHP:
$pairs = \XF::query('xf_user')
->dump()
->select('user_id', 'username')
->limit(5)
->fetchPairs();
Мы поддерживаем методы
dump
, dd
, dumpSimple
, ddSimple
, dumpToFile
, dumpToFileNamed
в любой точке цепочки конструктора запросов. Эти методы регистрируют событие, которое срабатывает до выполнения окончательного запроса, что означает, что оно также работает с агрегатными методами, такими как count
и sum
.
SQL:
SELECT "user_id", "username" FROM "xf_user" LIMIT 5
![[aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli [aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli](https://aprodam.ru/data/attachments/8/8815-f23b86c99ec290befd9f6ab4f446b64b.jpg?hash=JeNri5NLpp)
Встроенная поддержка веб-сервера PHP
Поиск подходящей среды для разработки и тестирования может быть сложной задачей. Существует множество продуктов, доступных для разных операционных систем. Иногда бывает сложно найти подходящую для вас, иногда вы можете столкнуться с проблемами после обновлений, или вы однажды включаете свой ноутбук, а ни одна из ваших баз данных недоступна. Мы уже говорили о том, как SQLite может помочь в этом — отсутствие необходимости управлять собственным экземпляром MySQL или MariaDB является огромным преимуществом — но что, если вам не нужно возиться с Nginx или Apache?
Код:
# php cmd.php xf:serve
Starting XenForo development server...
XenForo development server started: http://localhost:8080
Document root is: /Users/chrisdeeming/Herd/24x
Press Ctrl-C to quit.
13:26:20 GET 200 / (432.84ms)
13:26:21 GET 200 /css.php?css=public%3Anormalize.css%2Cpublic%3Afa.css%2Cpublic%3Avariations.less%2Cpublic%3Acore.less%2Cpublic%3Aapp.less&s=1&l=1&d=1747965566&k=975f8f0746a2cbf3a7f3ee7c96f538e9a2bf61e6 (488.67ms)
13:26:21 GET 200 /css.php?css=public%3Anode_list.less%2Cpublic%3Ashare_controls.less%2Cpublic%3Aextra.less&s=1&l=1&d=1747965566&k=b21bffa3ee848ff6a7384493bd4c8b387d4a511e (58.2ms)
13:26:21 GET 200 /js/xf/preamble.js?_v=e361daff
...
Используя встроенный веб-сервер PHP, вы можете быстро развернуть сервер разработки, не касаясь конфигураций веб-сервера или полных сред, таких как Herd, WAMP, MAMP или Docker.
XenForo Development REPL
Добавлена новая команда CLI xf-dev:tinker, предоставляющая REPL (цикл чтения–вычисления–печати) для разработки XenForo. Она построена на превосходной библиотеке Psysh и предоставляет удобную площадку для запуска фрагментов кода, тестирования служб и интерактивного осмотра среды.
REPL предварительно загружен общими переменными, такими как $app, $db, $em и многими другими, которые вы могли (не) ожидать. Вы можете просмотреть полный список с помощью команды ls -l --vars или отключить это поведение с помощью флага --without-vars.
Вы можете использовать опцию --execute, чтобы передать код для непосредственного запуска, что может быть полезно для запуска быстрых одноразовых скриптов, или передать пути к файлам в качестве аргументов для их включения при запуске REPL, что может быть полезно для общего кода настройки. REPL также включает флаг --with-commands, позволяющий вызывать другие команды CLI XenForo в REPL.
Веб-сайт и документация Psysh могут быть полезными ссылками для начала работы с ним:
![[aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli [aprodam.ru] XenForo 2.4 - Использование PDO для взаимодействия с базой данных вместо mysqli](https://aprodam.ru/data/attachments/8/8816-1c2e66ee61060916d491d109483eae64.jpg?hash=yBTzcYthyq)