Можно ли рассчитывать на то, что PHP-расширение SimpleXML обязано присутствовать в любой инсталляции Drupal 8?

Главные вкладки

Лучший ответ

Аватар пользователя ivnish ivnish 19 февраля 2019 в 14:13
1

Никогда не нужно ни на что рассчитывать Smile Нужно проверять наличие и сообщать об отсутствии, например в отчет "О состоянии", либо на странице настроек модуля

Комментарии

Аватар пользователя ivnish ivnish 19 февраля 2019 в 14:13
1

Никогда не нужно ни на что рассчитывать Smile Нужно проверять наличие и сообщать об отсутствии, например в отчет "О состоянии", либо на странице настроек модуля

Аватар пользователя marassa marassa 19 февраля 2019 в 14:52

Да это всё понятно, просто не хотелось бы добавлять requirement из-за одной строчки кода ПРИ условии, что этого расширения у многих может не быть. В модуле в основном используется расширение XML, но одну маленькую фитюльку мне удобнее сделать на SimpleXML. Если SimpleXML является системным требованием ядра Друпал, то это одно, а если нет, и реально у многих оно не включено, то я лучше напишу вместо одной строчки пять и сделаю на XML.
На drupal.org есть вот такой документ, в котором приведен некий список расширений, включающий SimpleXML, но при этом нет явного и недвусмысленного утверждения, что именно этот список является частью системных требований.

Аватар пользователя ivnish ivnish 19 февраля 2019 в 14:55

Я недавно чинил сайт, который падал от включения модуля xmlsitemap. Оказалось, там на VPS не поставили php-xml) И такое бывает Smile

Аватар пользователя marassa marassa 20 февраля 2019 в 6:49

Нет, мне в моем KML-энкодере надо взять готовый фрагмент KML, генерируемый форматтером поля, например GeoField, и подсунуть его в общий PHP-массив документа, который будет потом закачан в DOMDocument и оттуда выгружен как XML штатным ядерным xml-энкодером Друпал (точнее symfony). Если я положу KML-текст просто как текстовое значение родительского XML-элемента, то умный xml-энкодер его заискейпит в CDATA. А если его вкачать в объект SimpleXML (одна строчка кода) и прямо этот объект подложить в массив, то умный xml-энкодер это поймет и правильно обработает. Средствами "взрослого" DOM-XML мне нужно мой несчастный фрагмент закачать сначала в специально для этого созданный DOMNode, а потом из него уже в мой PHP- массив, что уж очень громоздко.

Аватар пользователя marassa marassa 19 февраля 2019 в 15:06

В общем, буду использовать наверное SimpleXML, и requirement пропишу на всякий случай. Пусть лучше модуль не ставится, чем падает Wink

Аватар пользователя gun_dose gun_dose 19 февраля 2019 в 15:51
1

Я этот хук в Commerce подсмотрел, им же bcmath требуется, казалось бы, такая элементарщина, а есть не везде. Так вот если они не обламываются юзать этот хук, то нам - простым смертным - переживать нечего))

Аватар пользователя sas@drupal.org sas@drupal.org 20 февраля 2019 в 7:27
1

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

Аватар пользователя marassa marassa 20 февраля 2019 в 7:52

И в этой логике есть резон, но можно же проверять только во время установки модуля ($phase == 'install'), тогда в рантайме никакие ресурсы жраться не будут.

Аватар пользователя bumble bumble 20 февраля 2019 в 20:30
1

К слову, "ext-SimpleXML" - есть в зависимостях Drupal.
Соответственно, если не рассчитывать на вафлов которые не используют композер - можно смело* использовать в кастоме.

Аватар пользователя marassa marassa 20 февраля 2019 в 22:10

bumble wrote:
вафлов которые не используют композер

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

PS А кстати что сделает composer если не найдет этого расширения - он же установить его самостоятельно не сможет?

Аватар пользователя bumble bumble 20 февраля 2019 в 22:17

Да нечему там учиться - просто нужно использовать. Не использовать - правда, глупо, но обидеть не преследовал цели Wink

Композер - ругнется и не установит проект, т.к. окружение не соответствует (об этом он расскажет в сообщении).

Аватар пользователя gun_dose gun_dose 20 февраля 2019 в 22:21

Если композер видит, что чего-то не хватает, то он пишет в консоль длинную тираду и ничего не устанавливает.