Magentoレジストリを理解する


13

すべてのレジストリデータはMagentoにどこに保存されているのでしょうか?

私は、シングルトンオブジェクトでさえレジストリに保存されることを知っています。レジストリは、Mageクラスの静的配列変数にすぎません。

混乱を解消するために、ここにいくつか質問があります。

  1. レジストリはユーザーごとに異なりますか?つまり、ユーザーごと(HTTP要求ごと)に作成されますか?

例えば、

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. レジストリデータはセッションに保存されますか?そうでない場合、Magentoはどのユーザーがレジストリデータを呼び出したかを特定しますか?

Alan Stormのブログ記事と、これに関するStackOverFlowに関する回答を読んだことがあります。しかし、私は混乱を殺すことができませんでした。私の基本がめちゃくちゃだと思うなら、私を修正してください。ありがとう




Amit Beraに感謝します。この質問を投稿する前に、アランによるその記事とSOFの回答を読んでいました。そこから答えを得ることができませんでした。
ハシッド14年

回答:


23

レジストリは、その要求に固有のデータ(ユーザーまたはその他のものではなく)をメモリに保存し、その要求の間のみ持続します。原則は非常に単純です。Mageクラスはすべてのリクエストに対してシングルトンオブジェクトとしてインスタンス化され、インスタンス化されたMageオブジェクトはメモリに残り、リクエストが完了してレスポンスが送信されるまで、すべてのクラス(およびテンプレート)でアクセスできます。

オブジェクトはシングルトンなので、アクセスするたびに同じオブジェクトが取得されます。起こっているのは、あなたがこのオブジェクトに値を保存しているということです。そのため、あるクラスが値を保存し、別のクラスが値にアクセスすると、両方が同じオブジェクトで動作し、2番目のクラスは最初のクラスが設定した値を取得できます。


1
それで、1つのリクエストに対してのみ生きていますか?つまり、Magentoでページを読み込むと、1つのリクエストがDONEになり、レジストリデータがフラッシュされます。
ハシッド14年

4
Yesの値はMage::register()、そのリクエストに対してのみ永続的に設定します。セッションを使用する必要があるユーザー固有のデータを保存する場合、レジストリは実際にはクラス間でデータを移植できるように設計されています。
ジョナサンハシー14年

1
それは理にかなっている!同じことがシングルトンインスタンスにも当てはまりますか?
ハシッド14年

1
はい、まったく同じです。クラスのgetSingleton()メソッドを見ると、Mage実際にレジストリにデータが保存されています。
ジョナサンハシー14年

3

レジストリはメモリに格納され、HTTPリクエストごとに保存されるため、異なるリクエストやユーザー間でデータを共有することはできません。


しかし、MagentoはどのようにしてHTTPリクエストとレジストリをマッピングするのでしょうか?
ハシッド14年

2

アプリケーションのメモリに保存されているMagentoレジストリ。

スクリプトの実行が完了すると、レジストリに保存していたものはすべてなくなるので、クリアすることを心配する必要はありません(実行しているスクリプトがレジストリに大きなオブジェクトを保存していて、データ)。

そのような場合は、エントリを完了したら登録を解除する必要があります。

レジストリは、Mageクラスの静的プロパティにすぎません。参照詳細

それでも、私は本当に良い説明を見つけることができませんでした

2)ユーザーごとに、サーバー上のリクエストごとに個別のレジストリがあります。

これがあなたの心の中で少し明らかになることを願っています


ありがとうリヤキャット。投稿する前にprattski.com/2014/09/23/using-the-magento-registry-mageregisterを読みました。Pしかし、Magentoはどのように変数とユーザーをマップしますか
ハシッド14年

1
@Hashid、アランのブログでもより多くのアイデアを得ることができます。コード内の各リクエストでレジストリがどのように機能するかを以下に示します。alanstorm.com/magento_registry_singleton_tutorial
liyakat

それも読んでください:-)
ハシッド14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.