Рейтинг:0

Как узнать, какие свойства и методы доступны для объекта entity_metadata_wrapper?

флаг us

Возможно, проще всего будет начать с примера.

Кажется, что функция entity_metadata_wrapper() выполняет много сложной магии за кулисами, чтобы вернуть объект со всеми данными, относящимися к рассматриваемому объекту. Но как мне узнать, какие свойства и методы будут доступны мне после возврата объекта?

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

Хорошо, так это Заказ, Позиции), Тип продукта, и Пользователь это все ссылочные объекты. Тип продукта имеет несколько настраиваемых полей, возможно, это ссылки на другой объект, например платежную информацию.

$order_wrapper = entity_metadata_wrapper('commerce_order', $order);

Согласно документам Entity API, все эти ссылочные объекты теперь включены в объект, готовый для использования, благодаря оболочке.

Но как мне узнать, как получить доступ к искомому значению или где оно находится в структуре объекта? Являются ли все упомянутые поля drupal своим именем машины по дизайну? Я знаю, что цепочка должна сыграть свою роль, так как это влияет? И не будет ли эта структура меняться каждый раз, когда вызывается entity_metadata_wrapper, учитывая, что рассматриваемый объект может произвольно ссылаться на другие объекты (которые ссылаются на другие объекты и т. д.)? И если структура произвольна, любой код, который полагался на эту структуру в данный момент времени, если она изменится, не нарушит ли это код?

Наконец, я вижу ссылки на такие вещи, как -> сохранить() и ->значение() в документах Entity API, но я не могу найти ссылку на полный набор доступных мне методов. Есть ли какая-то логическая структура для выяснения этого или мне нужно каждый раз использовать что-то вроде xdebug (и если я это сделаю, это все равно не даст мне знать, какие методы доступны мне для работы с данными). Это для D7, но если ответ D8+ может добавить ясности, пожалуйста, предоставьте.

misterdidi avatar
флаг de
Это то, что вы ищите ? [https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#debugging](https://www.drupal.org/docs/7/api/entity-api/ сущность-метаданные-обертки#отладка)
флаг cn
Краткий ответ: используйте IDE и потратьте время на ее правильную настройку. Например, я использую PHPStorm: https://drupalize.me/topic/phpstorm
флаг cn
IDE на самом деле здесь не помогают, это все магические методы, поэтому свойства/методы не известны до времени выполнения. См. https://drupal.stackexchange.com/questions/33473/is-there-a-good-way-to-inspect-objects-whose-type-is-derived-from-the-entitydrup для некоторых идей.

Ответить или комментировать

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