Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 4 / 昨日: 3
総計: 1542

psr:psr14

文書の過去の版を表示しています。


編集中

PSR-14: Event Dispatcher

y2sunlight 2020-06-23

本章は、若干の補足を加筆してはいるものの単にPSRのサイトを翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。

関連記事


PSR-14: イベントディスパッチャー

原文より翻訳 PSR-14: Event Dispatcher 2020-07-21 現在

イベントディスパッチは、よくテストされた一般的なメカニズムであり、開発者はロジックをアプリケーションに簡単かつ一貫して注入できます。

このPSRの目的は、イベントベースの拡張とコラボレーションのための共通のメカニズムを確立して、さまざまなアプリケーションとフレームワークとの間でライブラリとコンポーネントをより自由に再利用できるようにすることです。

このドキュメントのキーワード MUST , MUST NOT , REQUIRED , SHALL , SHALL NOT , SHOULD , SHOULD NOT , RECOMMENDED , MAY 及び OPTIONAL は、 RFC 2119で説明されているように解釈して下さい。

RFC 2119の説明
MUST, REQUIRED, SHALL — 絶対必要
MUST NOT, SHALL NOT — 絶対禁止
SHOULD, RECOMMENDED — 推奨(但し、無視できる特定の正当な理由が存在するかもしれない)
SHOULD NOT — 推奨できない(但し、許可できる特定の正当な理由が存在するかもしれない)
MAY, OPTIONAL — オプション


目標

イベントをディスパッチし処理するための共通のインターフェースがあると、開発者は、多くのフレームワークや他のライブラリと共通の方法で相互作用できるライブラリを作成できます。

いくつかの例:

  • ユーザーに権限がない場合にデータの保存やアクセスを防止するセキュリティフレームワーク
  • 一般的な全ページキャッシュシステム
  • どのフレームワークに統合されているかに関係なく、他のライブラリを拡張するライブラリ
  • アプリケーション内で行われたすべてのアクションを追跡するロギングパッケージ


定義

  • イベント – イベントは、エミッターが生成するメッセージです。任意のPHPオブジェクトを使用できます。

  • リスナー – リスナーは、イベントを渡されることを期待している任意のPHP callableです。同じイベントは異なったリスナーに渡すことができます。リスナーは、必要に応じて他の非同期動作をキューに追加できます( MAY )。

  • エミッター – エミッターは、イベントをディスパッチしたい任意のコードです。これは「呼び出しコード(calling code)」とも呼ばれます。これは、特定のデータ構造によって表現されるのではなく、ユースケースを指しています。

  • ディスパッチャー – ディスパッチャーは、エミッターによってイベントオブジェクトが与えられるサービスオブジェクトです。 ディスパッチャーは、イベントが全ての関連するリスナーに確実に渡されるようにする責任があります。ただし、責任のあるリスナーの決定をリスナープロバイダーに任せる必要があります( MUST )。

  • リスナープロバイダー – リスナープロバイダーは、与えられたイベントに関連するリスナーを決定する責任があります。ただし、リスナー自体を呼び出してはいけません( MUST NOT )。リスナープロバイダーは、いくつかの関連するリスナーを指定できます。


イベント

イベントは、エミッターとその適切なリスナーとの通信の単位として機能するオブジェクトです。

エミッターに戻りの情報を提供するリスナーのユースケース呼び出しが必要な場合、イベントオブジェクトはで変更可能であることがあります( MAY )。ただし、そのような双方向通信が必要ない場合は、イベントを不変として定義することをお勧めします( RECOMMENDED )。つまり、イベントには変更可能なメソッドを含まないように定義します。

実装者は、同じオブジェクトが全てのリスナーに渡されることを想定する必要があります( MUST )。

イベントオブジェクトは可逆的なシリアル化と逆シリアル化をサポートすることを推奨されます( RECOMMENDED )。しかし、それは必須ではありません( NOT REQUIRED )。即ち、$event == unserialize(serialize($event)) は true を保つべきです( SHOULD )。 オブジェクトは、PHPの Serializable インターフェース、__sleep() または __wakeup() マジックメソッド、または必要に応じて同様の言語機能を活用できます( MAY )。


停止可能なイベント

停止可能なイベントは、イベントの特殊なケースで、リスナーがさらに呼び出されないようにする追加の方法を含んでいます。これは、StoppableEventInterface を実装することによって示すことができます。

StoppableEventInterfaceを実装するイベントは、それが表すどんなイベントが完了したときでも isPropagationStopped() から true を返す必要があります( MUST )。それがいつであるかを決定するのは、クラスの実装者次第です。例えば、PSR-7 RequestInterface オブジェクトを対応する ResponseInterface オブジェクトと照合するように要求しているイベントは、リスナーが呼び出す setResponse(ResponseInterface $res) メソッドを持つことができます。これにより isPropagationStopped()trueを返すようにできます。


リスナー

A Listener may be any PHP callable. A Listener MUST have one and only one parameter, which is the Event to which it responds. Listeners SHOULD type hint that parameter as specifically as is relevant for their use case; that is, a Listener MAY type hint against an interface to indicate it is compatible with any Event type that implements that interface, or to a specific implementation of that interface.

リスナーは、任意のPHP callableです。リスナーは、パラメーターを1つだけ持つ必要があります( MUST )。それは、応答すべきイベントです。リスナーは、そのユースケースに特に関連するように、そのパラメーターにタイプヒントを示すべきです( SHOULD )。つまり、リスナーはインターフェースに対するタイプヒントを示す場合があり( MAY )、それはそのインターフェースを実装するすべてのイベントタイプまたはそのインターフェースの特定の実装と互換性があることを示します。

A Listener SHOULD have a void return, and SHOULD type hint that return explicitly. A Dispatcher MUST ignore return values from Listeners.

リスナーの戻り値は void であるべきで( SHOULD )、明示的に戻すタイプヒントがあるべきです( SHOULD )。ディスパッチャーは、リスナーからの戻り値を無視する必要があります( MUST )。

A Listener MAY delegate actions to other code. That includes a Listener being a thin wrapper around an object that runs the actual business logic.

リスナーは他のコードにアクションを委任してもよい( MAY )。これには、薄いラッパーであるリスナーが含まれていて、それは実際のビジネスロジックを実行するオブジェクトを包んでいます。

A Listener MAY enqueue information from the Event for later processing by a secondary process, using cron, a queue server, or similar techniques. It MAY serialize the Event object itself to do so; however, care should be taken that not all Event objects may be safely serializable. A secondary process MUST assume that any changes it makes to an Event object will NOT propagate to other Listeners.

リスナーは、cron、キューサーバー、または同様の手法を使用して、セカンダリプロセスによる後処理のためにイベントから情報をキューに追加する場合があります( MAY )。それを行うために、イベントオブジェクト自体をシリアル化することができます( MAY )。ただし、すべてのイベントオブジェクトが安全にシリアル化できるとは限らないことに注意する必要があります。セカンダリプロセスは、イベントオブジェクトに加えた変更が他のリスナーに伝播しないことを前提とする必要があります( MUST NOT )。


ディスパッチャー

A Dispatcher is a service object implementing EventDispatcherInterface. It is responsible for retrieving Listeners from a Listener Provider for the Event dispatched, and invoking each Listener with that Event.

ディスパッチャーは、EventDispatcherInterface を実装するサービスオブジェクトです。それは、ディスパッチされるイベントに対するリスナープロバイダーからリスナーを取得し、そのイベントで各リスナーを呼び出す責任があります。

A Dispatcher:

ディスパッチャーは:

  • MUST call Listeners synchronously in the order they are returned from a ListenerProvider.
  • MUST return the same Event object it was passed after it is done invoking Listeners.
  • MUST NOT return to the Emitter until all Listeners have executed.
  • ListenerProviderから返された順番で、リスナーを同期的に呼び出さなければなりません( MUST )。
  • リスナーの呼び出し完了後に渡されたものと同じイベントオブジェクトを返さなければなりません( MUST )。
  • すべてのリスナーが実行されるまで、エミッターに戻らないでください( MUST NOT )。

If passed a Stoppable Event, a Dispatcher

停止可能なイベントが渡された場合、ディスパッチャーは:

  • MUST call isPropagationStopped() on the Event before each Listener has been called. If that method returns true it MUST return the Event to the Emitter immediately and MUST NOT call any further Listeners. This implies that if an Event is passed to the Dispatcher that always returns true from isPropagationStopped(), zero listeners will be called.
  • そのイベントで各リスナーを呼び出す前に、isPropagationStopped() を呼び出す必要があります( MUST )。そのメソッドが true を返す場合、それは直ちにイベントをエミッターに返さなければならず( MUST )、それ以上のリスナーを呼び出してはいけません( MUST NOT )。これは、isPropagationStopped() から常に true を返すイベントがディスパッチャーに渡された場合、リスナーが呼び出されないことを意味します。

A Dispatcher SHOULD assume that any Listener returned to it from a Listener Provider is type-safe. That is, the Dispatcher SHOULD assume that calling $listener($event) will not produce a TypeError.

ディスパッチャーは、リスナープロバイダーから返されるすべてのリスナーがタイプセーフであると仮定すべきです( SHOULD )。つまり、ディスパッチャーは、$listener($event) を呼び出しても TypeError が生成されないことを仮定すべきです( SHOULD )。


エラー処理

An Exception or Error thrown by a Listener MUST block the execution of any further Listeners. An Exception or Error thrown by a Listener MUST be allowed to propagate back up to the Emitter.

リスナーによってスローされた例外またはエラーは、それ以降のリスナーの実行をブロックする必要があります( MUST )。リスナーによってスローされた例外またはエラーは、エミッターにまで伝播できる必要があります( MUST )。

A Dispatcher MAY catch a thrown object to log it, allow additional action to be taken, etc., but then MUST rethrow the original throwable.

ディスパッチャーは、スローされたオブジェクトをキャッチしてログに記録したり、追加のアクションを実行したりできますが( MAY )、その後は、元のthrowableを再スローする必要があります( MUST )。


リスナープロバイダー

A Listener Provider is a service object responsible for determining what Listeners are relevant to and should be called for a given Event. It may determine both what Listeners are relevant and the order in which to return them by whatever means it chooses. That MAY include:

リスナープロバイダーは、与えられたイベントに対してどのリスナーが関連し、どのリスナーを呼び出すべきかを決定することに責任があるサービスオブジェクトです。それは、どのリスナーが関連しているか、そしてそれが選択するどんな手段によってもそれらを返す順序の両方を決定するかもしれません。それには以下の場合が含まれています( MAY ):

  • Allowing for some form of registration mechanism so that implementers may assign a Listener to an Event in a fixed order.
  • Deriving a list of applicable Listeners through reflection based on the type and implemented interfaces of the Event.
  • Generating a compiled list of Listeners ahead of time that may be consulted at runtime.
  • Implementing some form of access control so that certain Listeners will only be called if the current user has a certain permission.
  • Extracting some information from an object referenced by the Event, such as an Entity, and calling pre-defined lifecycle methods on that object.
  • Delegating its responsibility to one or more other Listener Providers using some arbitrary logic.
  • 実装者がイベントにリスナーを固定された順序で割り当てることができるように、ある種の登録メカニズムを可能にします。
  • イベントのタイプと実装されたインターフェースに基づいたリフレクションにより、該当するリスナーのリストを導き出します。
  • 前もって実行時に参照される可能性のあるリスナーの編集済みリストを生成します。
  • 現在のユーザーが特定の権限を持っている場合に特定のリスナーが呼び出されるだけのよう、ある種のアクセス制御を実装します。
  • エンティティなどの、イベントによって参照されるオブジェクトから情報を抽出し、そのオブジェクトで事前定義されたライフサイクルメソッドを呼び出します。
  • 任意のロジックを使用して、その責任を1つ以上の他のリスナープロバイダーに委任します。

Any combination of the above, or other mechanisms, MAY be used as desired.

上記の任意の組み合わせ、または他のメカニズムは、必要に応じて使用できます( MAY )。

Listener Providers SHOULD use the class name of an Event to differentiate one event from another. They MAY also consider any other information on the event as appropriate.

リスナープロバイダーは、イベントのクラス名を使用して、イベントを区別する必要があります( SHOULD )。それらはまた、必要に応じて、イベントに関するその他の情報を考慮することができます( MAY )。

Listener Providers MUST treat parent types identically to the Event’s own type when determining listener applicability. In the following case:

リスナープロバイダーは、リスナーの適用可能性を決定するときに、親のタイプをイベント自体のタイプと同じように取り扱う必要があります( MUST )。次の場合:

class A {}
 
class B extends A {}
 
$b = new B();
 
function listener(A $event): void {};

A Listener Provider MUST treat listener() as an applicable listener for $b, as it is type compatible, unless some other criteria prevents it from doing so.

リスナープロバイダーは、タイプ互換であるため、他の基準によって妨げられない限り、listener()$b の適切なリスナーとして取り扱う必要があります( MUST )。


オブジェクト構成

A Dispatcher SHOULD compose a Listener Provider to determine relevant listeners. It is RECOMMENDED that a Listener Provider be implemented as a distinct object from the Dispatcher but that is NOT REQUIRED.

ディスパッチャーは、関連するリスナーを決定するためにリスナープロバイダーを構成する必要があります( SHOULD )。 リスナープロバイダーをディスパッチャーとは異なるオブジェクトとして実装することをお勧めしますが( RECOMMENDED )、必須ではありません( NOT REQUIRED )。


インターフェース

EventDispatcherInterface.php
namespace Psr\EventDispatcher;
 
/**
 * Defines a dispatcher for events.
 * イベントのディスパッチャを定義します。
 */
interface EventDispatcherInterface
{
    /**
     * Provide all relevant listeners with an event to process.
     * 処理するイベントをすべての関連リスナーに提供します。
     *
     * @param object $event
     *   The object to process.
     *   処理するオブジェクト。
     *
     * @return object
     *   The Event that was passed, now modified by listeners.
     *   渡されたイベント。リスナーによって変更されました。
     */
    public function dispatch(object $event);
}
ListenerProviderInterface.php
namespace Psr\EventDispatcher;
 
/**
 * Mapper from an event to the listeners that are applicable to that event.
 * イベントからそのイベントに適用可能なリスナーへのマッパー。
 */
interface ListenerProviderInterface
{
    /**
     * @param object $event
     *   An event for which to return the relevant listeners.
     *   関連するリスナーを返すイベント。
     * @return iterable<callable>
     *   An iterable (array, iterator, or generator) of callables.  Each
     *   callable MUST be type-compatible with $event.
     *   呼び出し可能オブジェクトの反復可能オブジェクト(配列、反復子、またはジェネレーター)。 
     *   各呼び出し可能オブジェクトは、$eventと型互換でなければなりません( MUST )。
     */
    public function getListenersForEvent(object $event) : iterable;
}
StoppableEventInterface.php
namespace Psr\EventDispatcher;
 
/**
 * An Event whose processing may be interrupted when the event has been handled.
 * イベントが処理されたときに処理が中断される可能性があるイベント。
 *
 * A Dispatcher implementation MUST check to determine if an Event
 * is marked as stopped after each listener is called.  If it is then it should
 * return immediately without calling any further Listeners.
 * Dispatcher実装は、各リスナーが呼び出された後にイベントが停止済みとしてマークされているかどうかを
 * 確認する必要があります( MUST )。そうであれば、それ以上リスナーを呼び出さずにすぐに戻る必要が
 * あります。
 */
interface StoppableEventInterface
{
    /**
     * Is propagation stopped?
     * 伝播は停止していますか?
     *
     * This will typically only be used by the Dispatcher to determine if the
     * previous listener halted propagation.
     * これは通常、前のリスナーが伝播を停止したかどうかを判断するためにDispatcherによってのみ
     * 使用されます。
     *
     * @return bool
     *   True if the Event is complete and no further listeners should be called.
     *   False to continue calling listeners.
     *   イベントが完了し、それ以上リスナーを呼び出さない場合はTrue。
     *   リスナーの呼び出しを続行する場合はFalse。
     */
    public function isPropagationStopped() : bool;
}


コメント

test216.169.129.254, 2022/11/29 09:51

https://www.footballjerseysforcheap.us.com/ https://www.cheapnfljerseyswholesale.com.co/ https://www.basketballapparel.us/ https://www.nhljerseysforcheap.us.com/ https://www.officialfootballjerseys.us.com/ https://www.baseballjerseyssale.us.com/ https://www.nflgearuniforms.us/ https://www.nhlstore.com.co/ https://www.cheapjerseyswholesalefreeshipping.com.co/ https://www.baseballjerseyswholesale.us/ https://www.cheapbaseballjerseyswholesale.us.com/ https://www.nflfanshop.us.com/ https://www.baseball-jerseys.us.com/ https://www.nflfootballjerseysforcheap.com/ https://www.wholesalejerseysforcheap.com/ https://www.baseballjerseyscheap.us.com/ https://www.baseballjerseyscheapwholesale.us.com/ https://www.cheap-nfljerseys.com.co/ https://www.nflfootballjerseys.com.co/ https://www.hockeyjerseyscheap.us/ https://www.cheapjerseysfromchinawholesale.com/ https://www.bestfootballjerseys.us.com/ https://www.footballjerseys.com.co/ https://www.cheaphockeyjerseys.us.com/ https://www.nflfootballjerseysnew.us.com/ https://www.cheapnfljerseysfromchina.com.co/ https://www.nflshop.com.co/ https://www.jerseyswholesale.com.co/ https://www.mlbbaseballjerseyscheap.us.com/ https://www.wholesalecheapjerseysfromchina.us/ https://www.cheapwholesalejerseys.com.co/ https://www.hockeyjerseyswholesale.us.com/ https://jerseysforcheapwholesale.us.com/ https://www.basketballjerseyswholesale.us/ https://www.wholesalejerseyscheapest.us.com/ https://www.nbastores.com.co/ https://www.jerseyscheapwholesalefromchina.us.com/ https://www.cheapfootballjerseysfromchina.us.com/ https://www.wholesalecheapjerseysshop.com.co/ https://www.officialmlbstore.us.com/ https://www.wholesalefootballjerseyscheap.us.com/ https://www.footballjerseyscheapest.us.com/ https://www.cheapbasketballjerseyswholesale.us.com/ https://www.jerseysforcheapwholesale.us/ https://www.nflproshops.com.co/ https://www.mlbshops.com.co/ https://www.nhljerseyscheapwholesale.us.com/ https://www.nbashop.us.org/ https://www.newfootballjerseys.us.com/ https://www.hockeystores.us.com/ https://www.cheapjerseysfromchinawholesale.com.co/ https://www.mlbjerseysforcheap.us.com/ https://www.footballstore.us.com/ https://www.cheapjerseyssale.us.org/ https://www.cheap-jerseyswholesale.com.co/ https://www.nfl-shop.com.co/ https://www.nfljerseyscheap.com.co/ https://www.nbajerseysnew.us.com/ https://www.officialnfljersey.us.com/ https://www.nhlhockeyjerseyswholesale.us.com/ https://www.bestnfljerseyscheap.us.com/ https://www.nfljerseysofficialshop.us/ https://www.cheapestjerseysfromchinafactory.us.com/ https://www.mlbbaseballjerseys.us.org/ https://www.footballproshop.us.com/ https://www.basketballjerseyscheapwholesale.us.com/ https://www.mlbjerseyswholesalecheap.us.com/ https://www.footballstores.us.com/ https://www.nflstores.com.co/ https://www.officialbaseballjerseys.us.com/ https://www.nflfanshop.com.co/ https://www.jerseyscheap.com.co/ https://www.wholesalejerseyschina.com.co/ https://www.jerseyswholesaleforcheap.us.com/ https://www.nflstoreonlineshopping.us/ https://www.basketballjerseyswholesale.us.com/ https://www.nflgear.com.co/ https://www.footballstoreonlineshopping.us.com/

test27.153.246.230, 2023/03/14 05:23

https://www.nikeoutletstoresonlineshopping.us.com/ https://www.nikesfactory.us.com/ https://www.nikeairjordan.us.com/ https://www.mensnikeshoes.us.com/ https://www.nikeoutletshoes.us.com/ https://www.shoeslouboutin.us.com/ https://www.lebron-shoes.us.com/ https://www.airmax270.us.org/ https://www.airjordan6rings.us/ https://www.airjordansneakers.us.com/ https://www.newnikeshoes.us.com/ https://www.redbottomslouboutin.us.org/ https://www.nikesoutletstoreonlineshopping.us.com/ https://www.vanscom.us.com/ https://www.pandora-braceletcharms.us/ https://www.yeezys-shoes.us.com/ https://www.jordan10.us.com/ https://www.pandoracanadajewelry.ca/ https://www.soccercleats.us.com/ https://www.jordan-retro6.us/ https://www.airjordansnew.us.com/ https://www.air-jordan6.us/ https://www.goldengooseoutletfactory.us.com/ https://www.jordansshoesforsale.us.com/ https://www.coatsmoncler.us.com/ https://www.jordan-shoesformen.us.com/ https://www.redbottomshoeslouboutin.us.com/ https://www.yeezys-shoes.us.org/ https://www.nikeair-jordan1.us.com/ https://www.retro-jordans.us/ https://www.jordansretro3.us/ https://www.huarachesnike.us.com/ https://www.nikeairmax98.us/ https://www.newjordansshoes.us.com/ https://www.pandorajewelryofficialsite.us.com/ https://www.new-jordans.us.com/ https://www.adidasnmdr1.us.org/ https://www.nikeofficialwebsite.us.com/ https://www.jordan11ssneakers.us/ https://www.jamesharden-shoes.us.org/ https://www.jordan1.us.com/ https://www.ggdbs.us.com/ https://www.asics-running-shoes.us.com/ https://www.yeezys.com.co/ https://www.jordan-4.us.com/ https://www.nike-jordans.us.com/ https://www.retrosairjordan.us/ https://www.monclervest.us.com/ https://www.balenciagatriples.us.org/ https://www.airmax270s.us.com/ https://www.christianlouboutinshoesinc.us.com/ https://www.jordans-4.us/ https://www.nikeshoesoutletfactory.us.com/ https://www.nikefactoryoutlets.us.org/ https://www.jordans-11.us/ https://www.jordan-12.us.com/ https://www.airjordan3s.us/ https://www.jordan13.us.org/ https://www.ggdbsneakers.us.com/ https://www.outletnikestore.us.com/ https://www.jordans11.us.com/ https://www.nikesnkrs.us.com/ https://www.jordans5.us/ https://www.air-jordans11.us.com/ https://www.monclercom.us.com/ https://www.fjallraven-kanken.us.com/ https://www.monclerstores.us.com/ https://www.yeezyonline.us.com/ https://www.jordanretros.us.com/ https://www.pandoras.us.com/ https://www.air-jordan12.us/ https://www.nike--shoes.us.com/ https://www.pandorasjewelry.us.com/ https://www.pandorajewelryofficial-site.us/ https://www.goldengoosessneakers.us.com/ https://www.jordan12retro.us.com/ https://www.louboutinshoesheels.us.com/ https://www.jordan9.us.com/ https://www.airforceoneshoes.us.com/ https://www.airjordanshoess.us.com/ https://www.jordan-8.us/ https://www.nikeairmax-shoes.us.com/ https://www.jordans1s.us.com/ https://www.air-jordan6.us.com/ https://www.jordan11sshoes.us/ https://www.newjordan11.us/ https://www.ferragamos.us.org/ https://www.nikesales.us.com/ https://www.airmax-95.us.com/ https://www.jordanretro11mens.us/ https://www.redbottomshoesforwomen.us.com/ https://www.jordanshoesretro.us.com/ https://www.adidasyeezysneakers.us.com/ https://www.jordan1universityblue.us.com/ https://www.nikeair-maxs.us.com/ https://www.jordan14.us.com/ https://www.airjordan5.us/ https://www.goldengooseshoess.us.com/ https://www.goldensgoose.us.com/ https://www.nike-airmax2018.us.com/ https://www.valentinosshoes.us.org/ https://www.ggdbshoes.us.com/ https://www.jordan1lows.us.com/ https://www.fitflop-shoes.us.org/ https://www.nikeoutletfactorys.us.com/ https://www.goldengoosesales.us.com/ https://www.pandorascharms.us.com/ https://www.airjordan1s.us.org/ https://www.pandoraonline.us/ https://www.jordan13s.us/ https://www.monclerjacketsstore.us.com/ https://www.air-jordansneakers.us/ https://www.airjordan4s.us/ https://www.airjordanretro11.us.com/ https://www.yeezy.us.org/ https://www.jordans1.us.com/ https://www.air-max90.us.com/ https://www.jordans-sneakers.us.com/ https://www.jordanshoess.us.com/ https://www.birkin-bag.us.com/ https://www.jordan11red.us.com/ https://www.nmds.us.com/ https://www.air-jordanssneakers.us/ https://www.air-jordan4.us.com/ https://www.jordan11low.us.com/ https://www.christianslouboutin.uk.com/ https://www.retrosjordans.us/ https://www.canadapandoracharms.ca/ https://www.goldengoosemidstar.us.com/ https://www.nikeshoesforwomens.us.com/ https://www.pandoraringssite.us/ https://www.jacketsmoncleroutlet.us.com/ https://www.jordan-retro1.us.com/ https://www.goldengoosesneakerss.us.com/ https://www.pandorajewellery.us.com/ https://www.jordanretro-11.us.com/ https://www.jordan12retros.us/ https://www.jordanscheapshoes.us/ https://www.christianslouboutinshoes.us.com/ https://www.kyrieirving-shoes.us.org/ https://www.eccos.us.com/ https://www.christian-louboutinheels.us.com/ https://www.airjordan11s.us.com/ https://www.adidasyeezysshoes.us.com/ https://www.balenciagaofficial.us.com/ https://www.air-jordan1s.us.com/ https://www.sneakersgoldengoose.us.com/ https://www.jordans4retro.us/ https://www.jordansretro12.us/ https://www.jordansneakerss.us/ https://www.jordan5.us.com/ https://www.nikeshoes-cheap.us.com/ https://www.outletgoldengoose.us.com/ http://www.pandorarings.us.com/

コメントを入力. Wiki文法が有効です:
 
psr/psr14.1595840247.txt.gz · 最終更新: 2020/07/27 17:57 by y2sunlight