質問: 1; node_save($node); _それはかなりきれいです。私が理解しているように(ただし、間違っている可能性があります)、entity_metadata_wrapper()を使用する同等のコードは、それよりも冗長になります。ここで私を混乱させるのが単に「ラッパー」という用語の使用なのかどうかはわかりませんが、entityモジュールのコードも調べましたが、実際にはあまり理解できていません。この関数を使用することの利点を説明でき、一般的なユースケースの簡単なコード例を提供できる人はいますか?
回答: はい、ノードのステータスの変更はハードコードされたプロパティであるため、簡単です。一方、フィールドははるかに複雑です。それらは3レベルの深さにネストされていますが、正しい言語で取得するための field_get_items() がありますが、フィールド値を設定するためのそのような関数はありません。したがって、常に フィールドが翻訳可能かどうかを確認 する必要があり、どのプロパティに設定したい、または設定したい値が正確に含まれているかを知る必要があります。エンティティラッパーが実行できることを示す2つの例: 次の行は、次の回答から引用した言語と参照idを保持する実際のプロパティを処理して、コマース広告申込情報を注文に追加します https://drupal.stackexchange.com/a/23513/ 31 $order_wrapper->commerce_line_items[] = $line_item; 同様に、言語やデルタをチェックする必要なく、フィールドの値に直接アクセスでき、参照されたエンティティに直接アクセスできます https://drupal.stackexchange。 com/a/33010/31 $subnode = entity_metadata_wrapper('node', $node)->field_subnode->value(); $default = $subnode->title; エンティティラッパーは、 search api や rules のような柔軟で強力なモジュールを推進する原動力であり、複数のレベルの参照を処理できるため、たとえばユーザーが[commerce-order:commerce-line-items:0:commerce-product:some-field]のようなもの(実際には正しくないかもしれませんが、そのようなもの)でユーザーが購入した製品のフィールドにアクセスするか、参照されたノードの本文の要約を検索インデックスに追加します。とは言っても、ラッパーの実際のapiは必ずしも好きではありません。巨大な内部配列であり、単純なプロパティでさえラッパークラスです。 drupal 8)の改良されたエンティティ(およびうまくいけばフィールド)システムが、クラス化されたエンティティのおかげでそのようなラッパーの必要性を取り除くことを願っています。