AttachedFilePathResolver
in package
フォームの添付ファイルのパスを解決する。
field[x@path] / field[x@baseName] はリクエストで運ばれ、確認画面
(ACMS_POST_Form_Confirm::modifyAttachedFile)ではコピー元・削除対象、送信
(ACMS_POST_Form_Submit)ではメール添付の読み出し元として使われる。両方の唯一の
入口がここなので、アーカイブ領域の外を指す値の拒否もここに集約する。
責務は Field から値を取り出して AttachedFilePath へ渡すこと、@path を
アーカイブ領域からの相対パスへ揃えること、拒否ログを出すことに限る。値の形式に
関する規則と、添付ファイルに対する判定・操作は AttachedFilePath 自身が持つ。
Why not file 型のサニタイズ(FileFieldHandler)に任せない:
あのハンドラは POST に {fd}:extension がある場合だけ呼ばれる opt-in の経路
(FieldExtractor::extractResult())で、リクエストから
:extension を省略すると @path / @baseName は POST の値のまま Field に残る。
「同一リクエストでアップロードされたファイル」の一覧はリクエスト単位のグローバル状態 (Entry サービス)なので、ここでは参照せず引数で受け取る。テスト時に任意の一覧を 差し込めるようにするためでもある(Authorization と同じ設計方針)。
Table of Contents
Properties
- $archivesDir : string
- $temporaryDirectory : string
Methods
- __construct() : mixed
- resolve() : AttachedFilePath|null
- 添付ファイルのパスを解決する
- rejectionMessage() : string
- 拒否ログの文言を組み立てる
- toRelativePath() : string
- `@path` をアーカイブ領域からの相対パスへ揃える
Properties
$archivesDir
private
string
$archivesDir
$temporaryDirectory
private
string
$temporaryDirectory
Methods
__construct()
public
__construct(string $archivesDir, string $temporaryDirectory) : mixed
Parameters
- $archivesDir : string
-
アーカイブ領域のパス(ARCHIVES_DIR)
- $temporaryDirectory : string
-
アーカイブ領域からの一時ディレクトリの相対パス
resolve()
添付ファイルのパスを解決する
public
resolve(Field $field, string $fieldKey, array<string|int, string> $uploadedPaths) : AttachedFilePath|null
Parameters
- $field : Field
-
抽出済みのフォームフィールド
- $fieldKey : string
-
{フィールド名}@path形式のキー。それ以外は対象外 - $uploadedPaths : array<string|int, string>
-
同一リクエストでアップロードされたファイルのパス一覧
Return values
AttachedFilePath|null —対象外・拒否した場合は null
rejectionMessage()
拒否ログの文言を組み立てる
private
static rejectionMessage(AttachedFilePathRejection $rejection) : string
Parameters
- $rejection : AttachedFilePathRejection
Return values
stringtoRelativePath()
`@path` をアーカイブ領域からの相対パスへ揃える
private
toRelativePath(string $path) : string
Why not 存在チェックだけで公開領域基準の解決を許さない: アーカイブ領域を取り除く分岐は V2(Twig)フォームがパスをルート相対(アーカイブ領域を含む)で出力するためのものだが、 条件が「カレントディレクトリ基準で存在すること」だけだと index.php のような アーカイブ領域の外の既存ファイルにも一致してしまう。
Parameters
- $path : string
-
@pathの正規化後の値