web-dev-qa-db-ja.com

8-$ variablesから値を取得する方法hook_preprocess commerce_order領収書?

ここでのすべての助けに感謝しますが、Imが特定の配列やオブジェクトからこれらの値を引き出す方法をすぐに判断できないのではないかと困惑します。

Hook_preprocess_hookのfrickin $ variables配列から注文ID(およびその他の値)を取得しようとしています

コードafc.theme

function afc_preprocess_commerce_order_receipt(&$variables) {
  dpm($variables['order_entity']);
  \Drupal::logger('afc_theme')->notice('running');
}

出力の一部

stdClass Object
(
    [__CLASS__] => Drupal\commerce_order\Entity\Order
    [values:protected] => Array
        (
            [order_id] => Array
                (
                    [x-default] => 182
                )

            [type] => Array
                (
                    [x-default] => default
                )

            [uuid] => Array
                (
                    [x-default] => c8b1c210-0e6e-4efb-a59d-84b28d4dadfe
                )

            [order_number] => Array
                (
                    [x-default] => 
                )

            [store_id] => Array
                (
                    [x-default] => 1
                )

            [uid] => Array
                (
                    [x-default] => Array
                        (
                            [0] => Array
                                (
                                    [target_id] => 1
                                )

                        )

                )

私はさまざまな間違ったを試しました:

$variables['order_entity'] = $order;
dpm($order->get("order_id")->getValue());
dpm($variables->get("order_id")->getValue());
dpm($variables['order_entity']['order_id'];

(1。この$ variablesオブジェクトからorder_idを取得するにはどうすればよいですか?

2。どのように/どこでこの情報を見つけて、この値を取得する方法を教えてくれましたか?

1
Matt Campbell

この$ variablesオブジェクトからorder_idを取得するにはどうすればよいですか?

すべてのエンティティには、_ Entity::id から継承された(またはオーバーライドされた)idメソッドがあります。デバッグ出力から、$variables['order_entity']はそのようなエンティティの1つであるように見えます。

$order_id = $variables['order_entity']->id();

どのように/どこでこの情報を見つけて、この価値を引き出す方法を教えてくれましたか?

ソースとドキュメントでの短い答え(ただし、追跡/検索は必ずしも簡単ではありません)。たとえば、= = Entity APIの紹介Drupal 8 を読んだ場合、Drupal\commerce_order\Entity\Orderがエンティティタイプであることを直感的に理解できます。フォルダ構造とその注釈によって、より一般的な用語でそのタイプのオブジェクトに対処する方法について考えることができます。

これにより、「Drupal 8のエンティティIDの取得」や「Drupal 8のエンティティフィールドの値のプログラムによる取得」などの検索が行われ、Googleは必要なすべての情報を忠実に伝えます。

少し時間を割いてチェーン階層のクラス階層をたどり、少なくとも各クラスの機能とその機能について大まかなアイデアを得ることができる場合、エンティティAPIとの今後の遭遇から多少の苦痛を感じることでしょう。

2
Clive