Helper
in package
旧 god class(約 3,800 行)の後方互換レイヤー。
横断的関心事はドメイン別サービスへ移設済みで、本クラスに残るのは (1) 自前ロジック(exceptionArray / fixAliasPath / camelize)と (2) 各サービスへの @deprecated 委譲シムだけ。
移行先の対応表(@deprecated タグのサービス名に対応する実体): url → Acms\Services\Url\UrlResolver url.managed-domain → Acms\Services\Url\ManagedDomainRegistry url.delivery-rewriter → Acms\Services\Url\DeliveryUrlRewriter crypto / crypto.salt / crypto.random → Acms\Services\Crypto{Encrypter, SaltRepository, RandomGenerator} security.csrf → Acms\Services\Security\CsrfTokenManager security.post-rate-limiter → Acms\Services\Security\PostRateLimiter response → Acms\Services\Response\Emitter response.header-builder → Acms\Services\Response\HeaderBuilder response.downloader → Acms\Services\Response\FileDownloader field → Acms\Services\Field\FieldRepository url.uri-object → Acms\Services\Url\UriObjectBuilder view.build-context → Acms\Services\View\BuildContext view.js-modules → Acms\Services\View\JsModulesBuilder mailer.template-renderer / mailer.config-resolver → Acms\Services\Mailer{TemplateRenderer, ConfigResolver} tag.parser → Acms\Services\Tag\TagParser template.theme-inheritance → Acms\Services\Template\ThemeInheritanceResolver validator.file-upload → Acms\Services\Validator\FileUploadValidator storage.asset-synchronizer → Acms\Services\Storage\AssetSynchronizer cache.page-writer → Acms\Services\Cache\PageCacheWriter fulltext → Acms\Services\Fulltext\Helper markdown → Acms\Services\Markdown\MarkdownConverter
Why not シムを消して行数を削る: @deprecated の委譲シムは外部プラグインの後方互換のために 存在する。行数(現在 953 行)の内訳は docblock 約 520 行・コード約 360 行で、 そのうち自前ロジックは 50 行しかない。「god class」という元の問題は既に解消しており、 これ以上削るには 72 個の単純委譲を __call + 別名表へ畳む必要がある。 それは Common:: の呼び出し 730 箇所の解決経路を変え、IDE の定義ジャンプと 静的解析の追跡性を失うため、本 PR の範囲では採らない。
Why not すべての処理をサービスへ移設しない(exceptionArray がここに残る理由): 「呼び出し元が本クラスしかない処理」を別クラスへ切り出すと、委譲するだけの薄いクラスが 増えるだけで(Speculative Generality)、しかも移設先パッケージから Common への逆方向依存を 生む。移設の判断基準は「本クラス以外に直接の利用者が居るか」とし、居ないものはここに実装を置く。 上表の移設先はいずれもこの基準を満たしている(例: ManagedDomainRegistry は 14 ファイル、 TagParser は 8 ファイルが本クラスを経由せず直接使う)。parseMarkdown も、サービス差し替え機構 (docs/steering/20260830-service-override-mechanism/design.md)により Unit モデル・Twig・ プラグインが 'markdown' サービスの直接の利用者になったため、この基準を満たして移設した。
Table of Contents
Methods
- addCsrfToken() : string
- CSRFトークンをFromに付与
- addSecurityHeader() : mixed
- セキュリティヘッダー
- backgroundRedirect() : mixed
- すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行
- buildCacheableHeaders() : array<string|int, string>
- クライアント・中間キャッシュ向けの Cache-Control 系ヘッダーを組み立てる純粋関数。
- buildPreviewAllowedOrigins() : array<string|int, string>
- getManagedOrigins() の組み立てロジックを、グローバル定数(HTTP_HOST 等)に依存しない 純粋関数として切り出したもの。
- camelize() : string
- checkCsrfToken() : bool
- CSRFトークンのチェック
- clientCacheHeader() : void
- セキュリティヘッダーを追加
- convertAssetUrlsToAbsolute() : string
- HTML内のアセット参照(画像・動画・スタイルシート等)を絶対URLに変換する。
- convertRelativeUrlToAbsolute() : string
- 単一の相対URLを絶対URL(フルURL)に変換する
- createCsrfToken() : string
- CSRFトークンを生成
- csrfTokenExists() : bool
- CSRFトークンの存在チェック
- decrypt() : string
- deleteField() : void
- カスタムフィールドの削除
- deleteFieldCache() : mixed
- カスタムフィールドキャッシュの削除
- download() : never
- ファイルダウンロード
- encrypt() : string
- exceptionArray() : array<string|int, string|int>
- 例外情報を連想配列に変換
- extract() : Field_Validation
- POSTデータからデータの抜き出し
- fixAliasPath() : string
- 管理画面でテンプレート直で書かれているパスを、エイリアスを含んだURLに修正
- flushCache() : mixed
- genPass() : string
- パスワードジェネレータ
- getAppSalt() : string
- アプリの固定ソルトを取得
- getCurrentSalt() : string
- 現在のソルトを取得
- getDeleteField() : Field
- extract()後の削除フィールドを取得
- getEncryptIv() : string
- getHttpHeader() : string
- ToDo: リファクタリング
- getInheritedThemes() : array<string|int, string>
- 指定されたテーマの継承テーマ・システムテーマすべてのテーマの配列を取得
- getJsModules() : array<string|int, mixed>
- getMailTxt() : string
- メールテンプレートの解決
- getMailTxtFromTxt() : string
- 文字列直接入力 (フォームの件名・本文など運営者の管理画面入力) からメール本文を組み立てる。
- getManagedOrigins() : array<string|int, string>
- window.postMessage の origin 検証に使う最小限のオリジン集合を、 scheme 付きオリジン(scheme://host[:port])の配列として取得する
- getPreviousSalt() : string
- 1つ前のソルトを取得
- getTagsFromString() : array<string|int, string>
- タグの配列化
- getUriObject() : Field
- URIオブジェクトの取得
- isAuthorizedAjaxRequest() : bool
- 許可されたajaxアクセスか判定(どのようなtpl指定であっても許可する)
- isForceV1Build() : bool
- 強制的にV1ビルドを行うか判定
- isLocalPrivateStorage() : bool
- プライベートストレージの設定がローカルかどうか
- isLocalPublicStorage() : bool
- パブリックストレージの設定がローカルかどうか
- isManagedDomain() : bool
- 指定されたドメインが管理ドメインかどうかを判定
- isPostSizeExceeded() : bool
- POST リクエストのボディサイズが PHP の post_max_size を超過しているか判定する。
- isSafeUrl() : bool
- a-blog cms で管理しているドメインのURLかチェックする
- isV2Module() : bool
- V2モジュールとして実行中か判定
- loadBlogFulltext() : string
- ブログのフルテキストを取得
- loadCategoryFulltext() : string
- カテゴリのフルテキストを取得
- loadEntryFulltext() : string
- エントリーのフルテキストを取得
- loadField() : Field
- ブログID, カテゴリーID, エントリーID,ユーザーIDの いずれか指定されたカスタムフィールドをFieldオブジェクトで返す
- loadUserFulltext() : string
- ユーザーのフルテキストを取得
- logLockPost() : mixed
- mailConfig() : mixed
- メール設定の取得
- parseMarkdown() : string
- マークダウン文字列を解析する
- replaceDeliveryUrl() : string
- メディアの配信先URLを書き換え
- replaceDeliveryUrlAll() : string
- メディアの配信先URLを書き換え(全て)
- resolveClientCacheHeaders() : array<string|int, string>
- clientCacheHeader() が送出する Cache-Control 等のヘッダー文字列を組み立てる。
- resolveUrl() : string
- V2モジュール、V2APIビルド時に、URLを絶対URLに変換 それ以外はそのままのURLを返す
- responseJson() : never
- saveCache() : mixed
- saveField() : bool
- カスタムフィールドの保存
- saveFulltext() : void
- フルテキストの保存
- setAppSalt() : void
- アプリ全体で使用するSaltを更新・設定
- setCurrentSalt() : void
- 現在のソルトを設定
- setForceV1Build() : void
- 強制的にV1ビルドを行うか設定
- setPreviousSalt() : void
- 1つ前のソルトを設定
- setSafeHeadersWithoutCache() : void
- キャッシュ無効で安全なレスポンスヘッダーを組み立てます。
- setV2Module() : void
- V2モジュールとして実行中か設定
- toAbsoluteUrl() : string
- URL を完全な absolute URL(scheme + host + path)に変換する。
- toRootRelativeUrl() : string
- URL を root-relative URL(`/path` 形式、scheme/host を含まない)に変換する。
- uploadAssetDirectory() : void
- ローカルのディレクトリをS3などのリモートストレージにアップロード
- validateFileUpload() : void
- ファイルアップロードを検証
- validateLockPost() : bool
- getManagedDomains() : array<string|int, string>
- 管理ドメインのリストを取得(キャッシュあり)
- assetSynchronizer() : AssetSynchronizer
- AssetSynchronizer のコンテナ singleton('storage.asset-synchronizer')を取得する。
- buildContext() : BuildContext
- V2モジュール/V1強制ビルドの実行時フラグを保持するコンテナ singleton を取得する。
- csrfTokenManager() : CsrfTokenManager
- CsrfTokenManager のコンテナ singleton('security.csrf')を取得する。
- deliveryUrlRewriter() : DeliveryUrlRewriter
- メディア配信先URL書き換えのコンテナ singleton('url.delivery-rewriter')を取得する。
- emitter() : Emitter
- Emitter のコンテナ singleton('response')を取得する。
- encrypter() : Encrypter
- Encrypter のコンテナ singleton('crypto')を取得する。
- fieldRepository() : FieldRepository
- FieldRepository のコンテナ singleton('field')を取得する。
- fileUploadValidator() : FileUploadValidator
- FileUploadValidator のコンテナ singleton('validator.file-upload')を取得する。
- headerBuilder() : HeaderBuilder
- HeaderBuilder のコンテナ singleton('response.header-builder')を取得する。
- jsModulesBuilder() : JsModulesBuilder
- JsModulesBuilder のコンテナ singleton('view.js-modules')を取得する。
- mailConfigResolver() : ConfigResolver
- ConfigResolver のコンテナ singleton('mailer.config-resolver')を取得する。
- mailTemplateRenderer() : TemplateRenderer
- TemplateRenderer のコンテナ singleton('mailer.template-renderer')を取得する。
- managedDomainRegistry() : ManagedDomainRegistry
- 管理ドメインレジストリのコンテナ singleton('url.managed-domain')を取得する。
- pageCacheWriter() : PageCacheWriter
- PageCacheWriter のコンテナ singleton('cache.page-writer')を取得する。
- postRateLimiter() : PostRateLimiter
- PostRateLimiter のコンテナ singleton('security.post-rate-limiter')を取得する。
- randomGenerator() : RandomGenerator
- RandomGenerator のコンテナ singleton('crypto.random')を取得する。
- saltRepository() : SaltRepository
- SaltRepository のコンテナ singleton('crypto.salt')を取得する。
- tagParser() : TagParser
- TagParser のコンテナ singleton('tag.parser')を取得する。
- themeInheritanceResolver() : ThemeInheritanceResolver
- ThemeInheritanceResolver のコンテナ singleton('template.theme-inheritance')を取得する。
- uriObjectBuilder() : UriObjectBuilder
- UriObjectBuilder のコンテナ singleton('url.uri-object')を取得する。
- urlResolver() : UrlResolver
- URL 解決のコンテナ singleton('url')を取得する。
Methods
addCsrfToken()
CSRFトークンをFromに付与
public
addCsrfToken(string $tpl) : string
'security.csrf' サービスを使用してください。
Parameters
- $tpl : string
Return values
stringaddSecurityHeader()
セキュリティヘッダー
public
addSecurityHeader() : mixed
'response' サービスを使用してください。
backgroundRedirect()
すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行
public
backgroundRedirect(string $url[, int $statusCode = 301 ]) : mixed
'response' サービスを使用してください。
Parameters
- $url : string
- $statusCode : int = 301
-
リダイレクトの HTTP ステータスコード(既定: 301)
buildCacheableHeaders()
クライアント・中間キャッシュ向けの Cache-Control 系ヘッダーを組み立てる純粋関数。
public
buildCacheableHeaders(int $cacheExpireClient[, int|null $lastModifiedTime = null ]) : array<string|int, string>
'response.header-builder' サービスを使用してください。
Parameters
- $cacheExpireClient : int
- $lastModifiedTime : int|null = null
-
Last-Modified に使う時刻。null の場合 REQUEST_TIME を使う
Return values
array<string|int, string>buildPreviewAllowedOrigins()
getManagedOrigins() の組み立てロジックを、グローバル定数(HTTP_HOST 等)に依存しない 純粋関数として切り出したもの。
public
static buildPreviewAllowedOrigins(string $ownHost, string|null $targetDomain, bool $isSecure, string $portValue) : array<string|int, string>
ManagedDomainRegistry::buildPreviewAllowedOrigins() を使用してください。
Why not 削除する: 移設前は public static だったため、外部プラグインから
Helper::buildPreviewAllowedOrigins(...) で呼べていた。他メソッドと同様の @deprecated
委譲シムとして残す(削除すると Call to undefined method で fatal になる)。
Parameters
- $ownHost : string
-
現在のリクエストのホスト名(HTTP_HOST 相当)
- $targetDomain : string|null
-
プレビュー対象ブログのドメイン(blogDomain(BID) 相当。未設定なら空文字/null)
- $isSecure : bool
-
現在のリクエストが https か(HTTPS 相当)
- $portValue : string
-
ポート文字列(":8080" 形式。既定ポートなら空文字。HTTP_PORT_VALUE 相当)
Return values
array<string|int, string>camelize()
public
camelize(string $str) : string
Parameters
- $str : string
Return values
stringcheckCsrfToken()
CSRFトークンのチェック
public
checkCsrfToken(string $token) : bool
'security.csrf' サービスを使用してください。
Parameters
- $token : string
Return values
boolclientCacheHeader()
セキュリティヘッダーを追加
public
clientCacheHeader([bool $noCache = false ]) : void
'response' サービスを使用してください。
Parameters
- $noCache : bool = false
convertAssetUrlsToAbsolute()
HTML内のアセット参照(画像・動画・スタイルシート等)を絶対URLに変換する。
public
convertAssetUrlsToAbsolute(string $html, string $baseUrl) : string
'url' サービスを使用してください。
Parameters
- $html : string
- $baseUrl : string
Return values
stringconvertRelativeUrlToAbsolute()
単一の相対URLを絶対URL(フルURL)に変換する
public
convertRelativeUrlToAbsolute(string $url, string $baseUrl) : string
'url' サービスを使用してください。
Parameters
- $url : string
- $baseUrl : string
Return values
stringcreateCsrfToken()
CSRFトークンを生成
public
createCsrfToken() : string
'security.csrf' サービスを使用してください。
Return values
stringcsrfTokenExists()
CSRFトークンの存在チェック
public
csrfTokenExists() : bool
'security.csrf' サービスを使用してください。
Return values
booldecrypt()
public
decrypt(string $cipherText, string $iv) : string
'crypto' サービスを使用してください。
Parameters
- $cipherText : string
- $iv : string
Tags
Return values
stringdeleteField()
カスタムフィールドの削除
public
deleteField("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, int|null $rvid = null ][, int|null $blogId = null ]) : void
'field' サービスを使用してください。
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $rvid : int|null = null
- $blogId : int|null = null
deleteFieldCache()
カスタムフィールドキャッシュの削除
public
deleteFieldCache("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, int|null $rvid = null ]) : mixed
'field' サービスを使用してください。
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $rvid : int|null = null
download()
ファイルダウンロード
public
download(string $path, string $fileName[, string|false $extension = false ][, bool $remove = false ][, Filesystem $storage = null ]) : never
'response.downloader' サービスを使用してください。
Parameters
- $path : string
- $fileName : string
- $extension : string|false = false
-
// 指定すると、Content-Disposition: inline になります。
- $remove : bool = false
- $storage : Filesystem = null
Return values
neverencrypt()
public
encrypt(string $string, string $iv) : string
'crypto' サービスを使用してください。
Parameters
- $string : string
- $iv : string
Return values
stringexceptionArray()
例外情報を連想配列に変換
public
exceptionArray(Throwable $th[, array<string|int, mixed> $add = [] ]) : array<string|int, string|int>
Why not 非推奨にしてサービスへ移設しない: AcmsLogger(Logger ファサード)は 'acms-logger' (Monolog\Logger 本体)に解決されるため、ログ用のフォーマッタをファサード経由で呼ぶ手段がない。 148箇所という利用実績もあり Common::exceptionArray() が実質的な正式経路なので、移設先を 別クラスに切っても Common を経由し続けることになる。委譲するだけの1メソッドクラスを挟まず ここに実装を置く(他の @deprecated シムと違い、新規コードもこのまま使ってよい)。
Parameters
- $th : Throwable
- $add : array<string|int, mixed> = []
Return values
array<string|int, string|int>extract()
POSTデータからデータの抜き出し
public
extract([string $scp = 'field' ][, ACMS_Validator|null $V = null ][, Field|null $deleteField = null ]) : Field_Validation
'field' サービスを使用してください。
image/file カスタムフィールドで旧ファイルを消す操作(削除チェック・差し替え)があった場合、 物理削除は即時には行わず Field のメタ情報 'removeOld' に記録する。 実際の物理削除はバリデーション通過後に呼ばれる saveField() 内で参照チェック (field / field_rev の両テーブルを検索)の上で行う。 よって旧ファイルを残すべきかどうか(新バージョン保存・作業領域のみの保存)は 呼び出し元が判定する必要はなく、参照チェックが自動的に判断する。
Parameters
- $scp : string = 'field'
- $V : ACMS_Validator|null = null
- $deleteField : Field|null = null
Return values
Field_ValidationfixAliasPath()
管理画面でテンプレート直で書かれているパスを、エイリアスを含んだURLに修正
public
fixAliasPath(string $txt) : string
Parameters
- $txt : string
Return values
stringflushCache()
public
flushCache() : mixed
'field' サービスを使用してください。
genPass()
パスワードジェネレータ
public
genPass(int $len) : string
'crypto.random' サービスを使用してください。
Parameters
- $len : int
-
パスワードの長さ
Return values
stringgetAppSalt()
アプリの固定ソルトを取得
public
getAppSalt() : string
'crypto.salt' サービスを使用してください。
Return values
stringgetCurrentSalt()
現在のソルトを取得
public
getCurrentSalt() : string
'crypto.salt' サービスを使用してください。
Return values
stringgetDeleteField()
extract()後の削除フィールドを取得
public
getDeleteField() : Field
'field' サービスを使用してください。
Return values
FieldgetEncryptIv()
public
getEncryptIv() : string
'crypto' サービスを使用してください。
Return values
stringgetHttpHeader()
ToDo: リファクタリング
public
getHttpHeader(string $name) : string
'security.csrf' サービスを使用してください。
Parameters
- $name : string
Return values
stringgetInheritedThemes()
指定されたテーマの継承テーマ・システムテーマすべてのテーマの配列を取得
public
getInheritedThemes(string $theme) : array<string|int, string>
'template.theme-inheritance' サービスを使用してください。
Parameters
- $theme : string
Return values
array<string|int, string>getJsModules()
public
getJsModules() : array<string|int, mixed>
'view.js-modules' サービスを使用してください。
Return values
array<string|int, mixed>getMailTxt()
メールテンプレートの解決
public
getMailTxt(string $path, Field $field[, string|null $charset = null ]) : string
'mailer.template-renderer' サービスを使用してください。
Parameters
- $path : string
- $field : Field
- $charset : string|null = null
Return values
stringgetMailTxtFromTxt()
文字列直接入力 (フォームの件名・本文など運営者の管理画面入力) からメール本文を組み立てる。
public
getMailTxtFromTxt(string $txt, Field $field) : string
'mailer.template-renderer' サービスを使用してください。
Parameters
- $txt : string
- $field : Field
Return values
stringgetManagedOrigins()
window.postMessage の origin 検証に使う最小限のオリジン集合を、 scheme 付きオリジン(scheme://host[:port])の配列として取得する
public
getManagedOrigins() : array<string|int, string>
'url.managed-domain' サービスを使用してください。
Return values
array<string|int, string>getPreviousSalt()
1つ前のソルトを取得
public
getPreviousSalt() : string
'crypto.salt' サービスを使用してください。
Return values
stringgetTagsFromString()
タグの配列化
public
getTagsFromString(string $string[, bool $checkReserved = true ]) : array<string|int, string>
'tag.parser' サービスを使用してください。
Parameters
- $string : string
- $checkReserved : bool = true
Return values
array<string|int, string>getUriObject()
URIオブジェクトの取得
public
getUriObject(Field $Post) : Field
'url.uri-object' サービスを使用してください。
Parameters
- $Post : Field
Return values
FieldisAuthorizedAjaxRequest()
許可されたajaxアクセスか判定(どのようなtpl指定であっても許可する)
public
isAuthorizedAjaxRequest([int $level = 1 ]) : bool
'security.csrf' サービスを使用してください。
level-0: チェックをしない level-1: RefererとAjaxリクエスト判定 level-2: CSRFトークンチェック
Parameters
- $level : int = 1
Return values
boolisForceV1Build()
強制的にV1ビルドを行うか判定
public
isForceV1Build() : bool
'view.build-context' サービスを使用してください。
Return values
boolisLocalPrivateStorage()
プライベートストレージの設定がローカルかどうか
public
isLocalPrivateStorage() : bool
'storage.asset-synchronizer' サービスを使用してください。
Return values
boolisLocalPublicStorage()
パブリックストレージの設定がローカルかどうか
public
isLocalPublicStorage() : bool
'storage.asset-synchronizer' サービスを使用してください。
Return values
boolisManagedDomain()
指定されたドメインが管理ドメインかどうかを判定
public
isManagedDomain(string $domain[, array<string|int, string> $additionalDomains = [] ]) : bool
'url.managed-domain' サービスを使用してください。
Parameters
- $domain : string
-
チェックするドメイン
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
boolisPostSizeExceeded()
POST リクエストのボディサイズが PHP の post_max_size を超過しているか判定する。
public
isPostSizeExceeded(string $requestMethod, int|null $contentLength, int $postMaxBytes) : bool
'response.header-builder' サービスを使用してください。
Parameters
- $requestMethod : string
-
リクエストメソッド($_SERVER['REQUEST_METHOD'])
- $contentLength : int|null
-
Content-Length(ヘッダ不在時は null)
- $postMaxBytes : int
-
post_max_size をバイトに換算した値(0 以下は無制限)
Return values
bool —超過していれば true
isSafeUrl()
a-blog cms で管理しているドメインのURLかチェックする
public
isSafeUrl(string $url) : bool
'url.managed-domain' サービスを使用してください。
Parameters
- $url : string
Return values
boolisV2Module()
V2モジュールとして実行中か判定
public
isV2Module() : bool
'view.build-context' サービスを使用してください。
Return values
boolloadBlogFulltext()
ブログのフルテキストを取得
public
loadBlogFulltext(int $bid) : string
Fulltext::loadBlogFulltext() を直接使用してください。
Parameters
- $bid : int
Return values
stringloadCategoryFulltext()
カテゴリのフルテキストを取得
public
loadCategoryFulltext(int $cid) : string
Fulltext::loadCategoryFulltext() を直接使用してください。
Parameters
- $cid : int
Return values
stringloadEntryFulltext()
エントリーのフルテキストを取得
public
loadEntryFulltext(int $eid) : string
Fulltext::loadEntryFulltext() を直接使用してください。
Why not ロジックをここに置く: フルテキスト関連の読み書き・正規化は Services\Fulltext に集約した (CMS-7772 のついでに実施したボーイスカウト対応)。本メソッドは既存の呼び出し元(Common ファサード 経由)を破壊しないための後方互換シムとして残す。
Parameters
- $eid : int
Return values
stringloadField()
ブログID, カテゴリーID, エントリーID,ユーザーIDの いずれか指定されたカスタムフィールドをFieldオブジェクトで返す
public
loadField([null|int $bid = null ][, null|int $uid = null ][, null|int $cid = null ][, null|int $mid = null ][, null|int $eid = null ][, null|string $unitId = null ][, null|int $rvid = null ][, bool $rewrite = false ]) : Field
'field' サービスを使用してください。
Parameters
- $bid : null|int = null
- $uid : null|int = null
- $cid : null|int = null
- $mid : null|int = null
- $eid : null|int = null
- $unitId : null|string = null
- $rvid : null|int = null
- $rewrite : bool = false
Return values
FieldloadUserFulltext()
ユーザーのフルテキストを取得
public
loadUserFulltext(int $uid) : string
Fulltext::loadUserFulltext() を直接使用してください。
Parameters
- $uid : int
Return values
stringlogLockPost()
public
logLockPost(string $lockKey) : mixed
'security.post-rate-limiter' サービスを使用してください。
Parameters
- $lockKey : string
mailConfig()
メール設定の取得
public
mailConfig([array{smtp-host?: string, smtp-port?: string, smtp-user?: string, smtp-pass?: string, smtp-verify-peer?: string, smtp-local-domain?: string, mail_from?: string, sendmail_path?: string, additional_headers?: string, smtp-google?: string, smtp-google-user?: string} $argConfig = [] ]) : mixed
'mailer.config-resolver' サービスを使用してください。
Parameters
- $argConfig : array{smtp-host?: string, smtp-port?: string, smtp-user?: string, smtp-pass?: string, smtp-verify-peer?: string, smtp-local-domain?: string, mail_from?: string, sendmail_path?: string, additional_headers?: string, smtp-google?: string, smtp-google-user?: string} = []
parseMarkdown()
マークダウン文字列を解析する
public
parseMarkdown(string $txt) : string
'markdown' サービス(Acms\Services\Markdown\Contracts\Converter)を使用してください。
Parameters
- $txt : string
Return values
stringreplaceDeliveryUrl()
メディアの配信先URLを書き換え
public
replaceDeliveryUrl(string $url) : string
'url.delivery-rewriter' サービスを使用してください。
Parameters
- $url : string
Return values
stringreplaceDeliveryUrlAll()
メディアの配信先URLを書き換え(全て)
public
replaceDeliveryUrlAll(string $html) : string
'url.delivery-rewriter' サービスを使用してください。
Parameters
- $html : string
Return values
stringresolveClientCacheHeaders()
clientCacheHeader() が送出する Cache-Control 等のヘッダー文字列を組み立てる。
public
resolveClientCacheHeaders([bool $noCache = false ]) : array<string|int, string>
'response.header-builder' サービスを使用してください。
Parameters
- $noCache : bool = false
Return values
array<string|int, string>resolveUrl()
V2モジュール、V2APIビルド時に、URLを絶対URLに変換 それ以外はそのままのURLを返す
public
resolveUrl(string $path[, string $offset = '' ]) : string
'url' サービスを使用してください。
Parameters
- $path : string
- $offset : string = ''
Return values
stringresponseJson()
public
responseJson(mixed $data) : never
'response' サービス(Acms\Services\Response\Emitter)の json() を使用してください。
Parameters
- $data : mixed
Return values
neversaveCache()
public
saveCache(string $chid, string $contents, string $mime) : mixed
'cache.page-writer' サービスを使用してください。
Parameters
- $chid : string
- $contents : string
- $mime : string
saveField()
カスタムフィールドの保存
public
saveField("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, Field|null $field = null ][, Field|null $deleteField = null ][, int|null $rvid = null ][, int $targetBid = BID ]) : bool
'field' サービスを使用してください。
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $field : Field|null = null
- $deleteField : Field|null = null
- $rvid : int|null = null
- $targetBid : int = BID
Return values
boolsaveFulltext()
フルテキストの保存
public
saveFulltext(string $type, int $id[, string|null $fulltext = null ][, int $targetBid = BID ]) : void
Fulltext::saveFulltext() を直接使用してください。
Parameters
- $type : string
-
フルテキストのタイプ
- $id : int
- $fulltext : string|null = null
- $targetBid : int = BID
setAppSalt()
アプリ全体で使用するSaltを更新・設定
public
setAppSalt() : void
'crypto.salt' サービスを使用してください。
setCurrentSalt()
現在のソルトを設定
public
setCurrentSalt(string $salt) : void
'crypto.salt' サービスを使用してください。
Parameters
- $salt : string
setForceV1Build()
強制的にV1ビルドを行うか設定
public
setForceV1Build(bool $isForceV1Build) : void
'view.build-context' サービスを使用してください。
Parameters
- $isForceV1Build : bool
setPreviousSalt()
1つ前のソルトを設定
public
setPreviousSalt(string $salt) : void
'crypto.salt' サービスを使用してください。
Parameters
- $salt : string
setSafeHeadersWithoutCache()
キャッシュ無効で安全なレスポンスヘッダーを組み立てます。
public
setSafeHeadersWithoutCache([int $code = 200 ][, string $mime = 'text/html' ]) : void
'response' サービス(Acms\Services\Response\Emitter)の safeHeaders() を使用してください。
Parameters
- $code : int = 200
- $mime : string = 'text/html'
setV2Module()
V2モジュールとして実行中か設定
public
setV2Module(bool $isV2Module) : void
'view.build-context' サービスを使用してください。
Parameters
- $isV2Module : bool
toAbsoluteUrl()
URL を完全な absolute URL(scheme + host + path)に変換する。
public
toAbsoluteUrl(string $path[, string $offset = '' ][, string|null $baseUrl = null ]) : string
'url' サービスを使用してください。
Parameters
- $path : string
-
入力パス
- $offset : string = ''
-
URL の前置オフセット(DIR_OFFSET 相当)
- $baseUrl : string|null = null
-
解決の基準とする base URL。null の場合は BASE_URL を使用
Return values
stringtoRootRelativeUrl()
URL を root-relative URL(`/path` 形式、scheme/host を含まない)に変換する。
public
toRootRelativeUrl(string $path[, string $offset = '' ][, string|null $baseUrl = null ]) : string
'url' サービスを使用してください。
Parameters
- $path : string
-
入力パス
- $offset : string = ''
-
URL の前置オフセット(DIR_OFFSET 相当)
- $baseUrl : string|null = null
-
解決の基準とする base URL。null の場合は BASE_URL を使用
Return values
stringuploadAssetDirectory()
ローカルのディレクトリをS3などのリモートストレージにアップロード
public
uploadAssetDirectory(string $from, string $to, bool $isPublic) : void
'storage.asset-synchronizer' サービスを使用してください。
Parameters
- $from : string
- $to : string
- $isPublic : bool
validateFileUpload()
ファイルアップロードを検証
public
validateFileUpload(string $name) : void
'validator.file-upload' サービスを使用してください。
Parameters
- $name : string
Tags
validateLockPost()
public
validateLockPost(string $lockKey[, int $trialTime = 5 ][, int $trialNumber = 5 ][, int $lockTime = 15 ][, bool $remoteAddr = true ]) : bool
'security.post-rate-limiter' サービスを使用してください。
Parameters
- $lockKey : string
- $trialTime : int = 5
-
試行時間
- $trialNumber : int = 5
-
試行回数
- $lockTime : int = 15
-
ロックタイム
- $remoteAddr : bool = true
-
接続元IPアドレスをチェックするかどうか
Return values
boolgetManagedDomains()
管理ドメインのリストを取得(キャッシュあり)
protected
getManagedDomains([array<string|int, string> $additionalDomains = [] ]) : array<string|int, string>
'url.managed-domain' サービスを使用してください。
Why not 削除する: 移設前は protected で、外部の拡張・テストが「DB 依存を除去するために オーバーライドする」対象になっていた(旧 HelperTest と同型)。呼び出し互換のために委譲シムを残す。 ただしオーバーライドしても isSafeUrl() / isManagedDomain() の結果は変わらない(それらは 'url.managed-domain' サービスを参照する)。差し替えたい場合は ManagedDomainRegistry の サブクラスをコンテナに登録すること。
Parameters
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
array<string|int, string>assetSynchronizer()
AssetSynchronizer のコンテナ singleton('storage.asset-synchronizer')を取得する。
private
assetSynchronizer() : AssetSynchronizer
Return values
AssetSynchronizerbuildContext()
V2モジュール/V1強制ビルドの実行時フラグを保持するコンテナ singleton を取得する。
private
buildContext() : BuildContext
Why not プロパティに保持する(コンストラクタで new / make する): BuildContext は setV2Module() / setForceV1Build() で書き換わる可変状態を持ち、リクエスト内で 1 インスタンスを 共有することが契約。Helper 内で new すると、@deprecated タグが移行先として案内している コンテナ側 singleton('view.build-context')と状態が分裂し、Common::setV2Module() の書き込みが 新 API の読み手に届かなくなる。コンストラクタで make() する形も同じ singleton を掴めるが、 ViewServiceProvider の登録より先に 'common' が解決される順序に暗黙依存するため、 参照時に毎回コンテナから引く(singleton なので同一インスタンスが返る)。
Return values
BuildContextcsrfTokenManager()
CsrfTokenManager のコンテナ singleton('security.csrf')を取得する。
private
csrfTokenManager() : CsrfTokenManager
Return values
CsrfTokenManagerdeliveryUrlRewriter()
メディア配信先URL書き換えのコンテナ singleton('url.delivery-rewriter')を取得する。
private
deliveryUrlRewriter() : DeliveryUrlRewriter
Return values
DeliveryUrlRewriteremitter()
Emitter のコンテナ singleton('response')を取得する。
private
emitter() : Emitter
Return values
Emitterencrypter()
Encrypter のコンテナ singleton('crypto')を取得する。
private
encrypter() : Encrypter
Return values
EncrypterfieldRepository()
FieldRepository のコンテナ singleton('field')を取得する。
private
fieldRepository() : FieldRepository
Return values
FieldRepositoryfileUploadValidator()
FileUploadValidator のコンテナ singleton('validator.file-upload')を取得する。
private
fileUploadValidator() : FileUploadValidator
Return values
FileUploadValidatorheaderBuilder()
HeaderBuilder のコンテナ singleton('response.header-builder')を取得する。
private
headerBuilder() : HeaderBuilder
Return values
HeaderBuilderjsModulesBuilder()
JsModulesBuilder のコンテナ singleton('view.js-modules')を取得する。
private
jsModulesBuilder() : JsModulesBuilder
Return values
JsModulesBuildermailConfigResolver()
ConfigResolver のコンテナ singleton('mailer.config-resolver')を取得する。
private
mailConfigResolver() : ConfigResolver
Return values
ConfigResolvermailTemplateRenderer()
TemplateRenderer のコンテナ singleton('mailer.template-renderer')を取得する。
private
mailTemplateRenderer() : TemplateRenderer
Return values
TemplateRenderermanagedDomainRegistry()
管理ドメインレジストリのコンテナ singleton('url.managed-domain')を取得する。
private
managedDomainRegistry() : ManagedDomainRegistry
Why not Helper 内で new する: このレジストリは DB 由来の管理ドメイン一覧をインスタンス内で
メモ化する。Helper が独自インスタンスを持つと、コンテナ側を使う FieldTrait('url')や
JsModulesBuilder('url.managed-domain')とメモ化キャッシュが分裂し、同一リクエスト内で
blog / alias の DISTINCT クエリが二重に走るうえ、リクエスト途中でドメインが増えた場合に
片方だけ古い一覧を保持して管理ドメイン判定が食い違う。テストでメモ化を分離したい場合は
new Helper() ではなく ManagedDomainRegistry::clearCache() を使う。
Return values
ManagedDomainRegistrypageCacheWriter()
PageCacheWriter のコンテナ singleton('cache.page-writer')を取得する。
private
pageCacheWriter() : PageCacheWriter
Return values
PageCacheWriterpostRateLimiter()
PostRateLimiter のコンテナ singleton('security.post-rate-limiter')を取得する。
private
postRateLimiter() : PostRateLimiter
Return values
PostRateLimiterrandomGenerator()
RandomGenerator のコンテナ singleton('crypto.random')を取得する。
private
randomGenerator() : RandomGenerator
Return values
RandomGeneratorsaltRepository()
SaltRepository のコンテナ singleton('crypto.salt')を取得する。
private
saltRepository() : SaltRepository
Return values
SaltRepositorytagParser()
TagParser のコンテナ singleton('tag.parser')を取得する。
private
tagParser() : TagParser
Return values
TagParserthemeInheritanceResolver()
ThemeInheritanceResolver のコンテナ singleton('template.theme-inheritance')を取得する。
private
themeInheritanceResolver() : ThemeInheritanceResolver
Return values
ThemeInheritanceResolveruriObjectBuilder()
UriObjectBuilder のコンテナ singleton('url.uri-object')を取得する。
private
uriObjectBuilder() : UriObjectBuilder
Return values
UriObjectBuilderurlResolver()
URL 解決のコンテナ singleton('url')を取得する。
private
urlResolver() : UrlResolver