UploadFieldHandler
in package
image / file 型カスタムフィールド 1 つ分のアップロード処理を担うハンドラの基底。
両型で共通する道具(候補の正規化・MIME 検証・削除予約のマーキング・生成通知)をここに集約し、 型ごとの差分をサブクラスの handle() に閉じる。
Why not $post を コンストラクタで受け取らない: FieldExtractor は
$this->Post =& $app->getPostParameter() と参照で保持しており、takeover 処理で
Application 側が POST オブジェクトを差し替える経路がある。ハンドラは
コンテナの singleton として一度だけ生成されるため、生成時の POST を抱えると
差し替え後に古いオブジェクトを掴み続ける。呼び出しごとに渡す。
Table of Contents
Properties
- $mimeTypeValidator : MimeTypeValidator
- $normalizer : UploadedFilesNormalizer
- $onMediaCreate : callable(string): void|null
- アップロードされたメディアファイルの生成を通知するコールバック(実パスを1引数で受ける)
Methods
- __construct() : mixed
- Why not クラス内で ACMS_Hook を直接呼ばない: フック発火はグローバル状態(HookFactory / HOOK_ENABLE)へのアクセスを伴うため、呼び出し側の private メソッドに閉じる規約 (development-guidelines.md「サービス層」)に従う。既定 null は、コンテナを経由せず 直接 new する単体テストのためのフォールバック(フックを発火しない)。
- handle() : void
- 1 フィールド分のアップロード処理を行い、結果を $field / $deleteField に書き込む。
- markFieldFileForRemoval() : void
- 削除チェック・差し替え時に旧ファイルを save() 後に物理削除するよう Field にマーキングする。
- notifyMediaCreated() : void
- メディアファイルが新規に作られたことを通知する。
Properties
$mimeTypeValidator
protected
MimeTypeValidator
$mimeTypeValidator
$normalizer
protected
UploadedFilesNormalizer
$normalizer
$onMediaCreate
アップロードされたメディアファイルの生成を通知するコールバック(実パスを1引数で受ける)
private
callable(string): void|null
$onMediaCreate
Methods
__construct()
Why not クラス内で ACMS_Hook を直接呼ばない: フック発火はグローバル状態(HookFactory / HOOK_ENABLE)へのアクセスを伴うため、呼び出し側の private メソッドに閉じる規約 (development-guidelines.md「サービス層」)に従う。既定 null は、コンテナを経由せず 直接 new する単体テストのためのフォールバック(フックを発火しない)。
public
__construct(UploadedFilesNormalizer $normalizer, MimeTypeValidator $mimeTypeValidator[, callable(string): void|null $onMediaCreate = null ]) : mixed
Parameters
- $normalizer : UploadedFilesNormalizer
- $mimeTypeValidator : MimeTypeValidator
- $onMediaCreate : callable(string): void|null = null
handle()
1 フィールド分のアップロード処理を行い、結果を $field / $deleteField に書き込む。
public
abstract handle(string $fd, Field_Validation $field, Field $post, Field $deleteField, ProcessingFiles $processing, array<int, string> $allowFileExtensions) : void
Parameters
- $fd : string
-
フィールドキー(例: 'photo')
- $field : Field_Validation
-
抽出中のカスタムフィールド
- $post : Field
-
抽出中の POST(参照の所有は FieldExtractor 側)
- $deleteField : Field
-
削除対象として積む Field
- $processing : ProcessingFiles
-
このリクエストでアップロード処理中のファイル(image / file で共有)
- $allowFileExtensions : array<int, string>
-
アップロードを許可する拡張子
markFieldFileForRemoval()
削除チェック・差し替え時に旧ファイルを save() 後に物理削除するよう Field にマーキングする。
protected
markFieldFileForRemoval(Field $field, string $fieldKey, string $relPath, "image"|"file" $type) : void
ここでは即時削除せず、save() の DB 書き込み完了後に FieldFileGarbageCollector が 参照チェックを通してから削除する。
Parameters
- $field : Field
-
extract 中の Field
- $fieldKey : string
-
image/file フィールドの key(例: 'photo')
- $relPath : string
-
archives ディレクトリからの相対パス
- $type : "image"|"file"
notifyMediaCreated()
メディアファイルが新規に作られたことを通知する。
protected
notifyMediaCreated(string $realPath) : void
Parameters
- $realPath : string