Есть ли хороший способ проверить объекты, тип которых получен из класса EntityDrupalWrapper?

Я уверен, что этот вопрос относится к другим сложным типам объектов, но EntityDrupalWrapper - это тот, с которым я сейчас работаю. Это тип объекта, возвращаемый entity_metadata_wrapper ( ) (и, возможно, другие).

При использовании кода, например:

$ order_wrapper = entity_metadata_wrapper ('commerce_order', $ order_object);
пм ($ order_wrapper);

вывод из Devel не слишком полезен:

screenshot

Он не показывает, что вы ожидаете увидеть для вызова dpm () с помощью, например, объекта stdClass.

Аналогичный вызов dvm () выполняет печать объекта, но в манере, с которой я не знаком, и это не очень читаемо.

Я пробовал debug (), и он выдает уведомление пользователя PHP, которое выглядит примерно так:

screenshot 2

Кстати, вывод HTML, содержащийся в этом предупреждении, - это тот же вывод, который выводит на экран dvm ().

Как я могу проверить эти типы объектов (желательно с Krumo), чтобы я мог видеть, какие свойства доступны? Или я застрял, используя dvm ()?

38 голосов | спросил Clive 7 J0000006Europe/Moscow 2012, 23:56:24

7 ответов


38

Использовать dpm ($ wrapper-> getPropertyInfo ());

Он находится в документах .

ответил TwiiK 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 13 Sep 2012 11:51:49 +0400 2012, 11:51:49
4

Я играл с объектами EntityDrupalWrapper. debug () обычно возвращает вывод, который может быть подготовлен __toString ()

Я повторил объект EntityDrupalWrapper, используя foreach, и он помог перечислить имя свойств.

foreach ($ order_wrapper as $ name => $ obj) {
  отладки ($ название);
  отлаживать (get_class ($ OBJ)); //EntityValueWrapper
}

Здесь $ obj - это объект типа EntityValueWrapper

$ obj может быть прочитано значением $ obj-> value () и может быть записано с помощью $ obj-> set ('value');

EDIT:

Если вы создали свою обертку без прохождения второго параметра т. е. entity_metadata_wrapper ('commerce_order'),
то методы set и value будут генерировать исключение, поскольку они не реализованы.

ответил Shoaib Nawaz 8 J0000006Europe/Moscow 2012, 00:17:16
4

Я закончил писать свой собственный маленький виджет, чтобы развернуть обертку:

function _wrapper_debug ($ w) {
  $ values ​​= array ();
  foreach ($ w-> getPropertyInfo () как $ key => $ val) {
    $ values ​​[$ key] = $ w-> $ key-> value ();
  }
  return $ values;
}

пм (_wrapper_debug ($ some_object_wrapper));

Надеюсь, что кто-то сочтет это полезным.

ответил Armadillo Jim 11 +04002013-10-11T01:21:17+04:00312013bEurope/MoscowFri, 11 Oct 2013 01:21:17 +0400 2013, 01:21:17
3

Модуль Inspect обеспечивает хороший структурный вид данных, которые вы хотите отлаживать.

  

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

ответил Lars Nielsen 22 42012vEurope/Moscow11bEurope/MoscowThu, 22 Nov 2012 13:11:20 +0400 2012, 13:11:20
3

Если вы хотите проверить исходный объект, который «активирует» оболочку, попробуйте:

пм ($ wrapper- > сырец ())

Это хорошо работает для меня.

ответил Nick 28 52014vEurope/Moscow11bEurope/MoscowFri, 28 Nov 2014 12:54:03 +0300 2014, 12:54:03
2

Существует патч devel , который позволяет Krumo показывать все личные и защищенные свойства.

Вот нить на drupal.org

Я нашел этот патч очень полезным.

ответил Felix Eve 23 FebruaryEurope/MoscowbTue, 23 Feb 2016 02:06:25 +0300000000amTue, 23 Feb 2016 02:06:25 +030016 2016, 02:06:25
0

Используйте drupal cli

$ drupal debug: entity
//Отображает текущие события
ответил Kevin howbrook 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 17 Sep 2017 20:07:25 +0300 2017, 20:07:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132