a-blog cms PHP API Reference

ProviderRegistry
in package

埋め込みを解決するプロバイダーを優先度つきで保持する。

コアは埋め込みライブラリを包んだ LibraryProvider を最後尾の優先度で登録する。 拡張アプリは ServiceProvider::init() などで Application::make('embed.providers') を取得し、 独自のプロバイダーを追加できる(ライブラリより前にも後にも割り込める)。

$registry = Application::make('embed.providers');
$registry->registerUrlPattern(
    '#^https://video\.example\.com/watch/(\d+)#i',
    static fn (array $matches, string $url): string =>
        '<iframe src="https://video.example.com/embed/' . $matches[1] . '"></iframe>'
);

解決結果の HTML は Helper が必ずサニタイズする。プロバイダーを登録しただけでは 出力は許可されないため、埋め込み先ホストを extends_html_purifier_iframe_allowed_hosts (script 形式なら extends_html_purifier_script_allowed_hosts)へ追加すること。

Table of Contents

Constants

DEFAULT_PRIORITY  = 10
既定の優先度。小さいほど先に評価する(WordPress の wp_embed_register_handler と同じ向き)。
LIBRARY_PRIORITY  = 100
コア既定のプロバイダー(埋め込みライブラリ)の優先度。

Properties

$entries  : array<int, Provider, priority: int, order: int}>
登録済みプロバイダー。
$order  : int
登録順の連番。同じ優先度での評価順を安定させるために使う。

Methods

providers()  : array<int, Provider>
評価順に並べたプロバイダーの一覧
register()  : void
プロバイダーを登録する
registerOEmbedEndpoint()  : void
oEmbed エンドポイントを登録する(oEmbed 対応サービス向け)
registerUrlPattern()  : void
URL の正規表現とコールバックでプロバイダーを登録する(oEmbed 非対応サービス向け)
resolve()  : EmbedData|null
最初に解決できたプロバイダーの結果を返す

Constants

DEFAULT_PRIORITY

既定の優先度。小さいほど先に評価する(WordPress の wp_embed_register_handler と同じ向き)。

public mixed DEFAULT_PRIORITY = 10

LIBRARY_PRIORITY

コア既定のプロバイダー(埋め込みライブラリ)の優先度。

public mixed LIBRARY_PRIORITY = 100

拡張が既定値のまま登録すれば必ずライブラリより先に評価され、ライブラリでも拾えなかった ときだけ効かせたい拡張はこれより大きい値を指定する、という余地を残すために離してある。

Properties

$entries

登録済みプロバイダー。

private array<int, Provider, priority: int, order: int}> $entries = []

$order

登録順の連番。同じ優先度での評価順を安定させるために使う。

private int $order = 0

Methods

register()

プロバイダーを登録する

public register(Provider $provider[, int $priority = self::DEFAULT_PRIORITY ]) : void
Parameters
$provider : Provider
$priority : int = self::DEFAULT_PRIORITY

小さいほど先に評価する

registerOEmbedEndpoint()

oEmbed エンドポイントを登録する(oEmbed 対応サービス向け)

public registerOEmbedEndpoint(string $pattern, string $endpoint[, array<string, scalar> $params = [] ][, int $priority = self::DEFAULT_PRIORITY ]) : void

通信はコア側の SSRF ガード付きクライアントで行うため、拡張側が HTTP クライアントを 用意する必要はない。

Parameters
$pattern : string

URL にマッチさせる PCRE

$endpoint : string

oEmbed エンドポイントの URL

$params : array<string, scalar> = []

エンドポイントへ追加で渡すクエリ

$priority : int = self::DEFAULT_PRIORITY

registerUrlPattern()

URL の正規表現とコールバックでプロバイダーを登録する(oEmbed 非対応サービス向け)

public registerUrlPattern(string $pattern, callable(array<int|string, string>, string): Array $handler[, int $priority = self::DEFAULT_PRIORITY ]) : void

コールバックは EmbedData/HTML 文字列/null のいずれかを返す。URL だけで埋め込み HTML を 組み立てられるサービス(地図・自社の動画配信など)は、これで外部通信なしに対応できる。

Parameters
$pattern : string

URL にマッチさせる PCRE

$handler : callable(array<int|string, string>, string): Array
$priority : int = self::DEFAULT_PRIORITY

resolve()

最初に解決できたプロバイダーの結果を返す

public resolve(string $url) : EmbedData|null

優先度の昇順(同値は登録順)に評価し、supports() が true でも結果が空(または null)なら 次のプロバイダーへフォールバックする。プロバイダーが例外を投げた場合も、そのプロバイダーを 飛ばして続行する(埋め込みの失敗で保存自体を止めないため)。

Parameters
$url : string
Return values
EmbedData|null —

どのプロバイダーも解決できなければ null


        
On this page

Search results