跳到主要內容

檔案

編輯此頁面

驗證值是否為有效的「檔案」,可以是下列其中一種

  • 字串(或具有 __toString() 方法的物件),指向現有檔案的路徑;
  • 有效的 File 物件(包括 UploadedFile 類別的物件)。

此限制條件通常用於表單中,搭配 FileType 表單欄位使用。

另請參閱

如果您要驗證的檔案是圖片,請嘗試 Image 限制條件。

適用於 屬性或方法
類別 檔案
驗證器 FileValidator

基本用法

此限制條件最常用於屬性上,該屬性將在表單中呈現為 FileType 欄位。例如,假設您正在建立作者表單,您可以在其中為作者上傳「簡歷」PDF 檔案。在您的表單中,bioFile 屬性將為 file 類型。Author 類別可能如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected File $bioFile;

    public function setBioFile(?File $file = null): void
    {
        $this->bioFile = $file;
    }

    public function getBioFile(): File
    {
        return $this->bioFile;
    }
}

為了確保 bioFile File 物件有效,且檔案大小低於特定值,並且是有效的 PDF 檔案,請新增以下內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\File(
        maxSize: '1024k',
        extensions: ['pdf'],
        extensionsMessage: 'Please upload a valid PDF',
    )]
    protected File $bioFile;
}

bioFile 屬性經過驗證,以確保它是一個真實的檔案。其大小和 mime 類型也經過驗證,因為已指定適當的選項。

注意

與大多數其他限制條件一樣,null 和空字串被視為有效值。這是為了允許它們成為可選值。如果該值是強制性的,常見的解決方案是將此限制條件與 NotBlank 結合使用。

選項

binaryFormat

類型boolean 預設值null

當為 true 時,大小將在訊息中以二進位字首單位 (KiB、MiB) 顯示。當為 false 時,大小將以 SI 字首單位 (kB、MB) 顯示。當為 null 時,binaryFormat 將從 maxSize 選項中定義的值推測而來。

有關二進位和 SI 字首之間差異的更多資訊,請參閱 Wikipedia:二進位字首

extensions

類型arraystring

如果設定,驗證器將檢查基礎檔案的副檔名和媒體類型(以前稱為 MIME 類型)是否等於給定的副檔名和相關的媒體類型(如果是字串),或是否存在於集合中(如果是陣列)。

預設情況下,允許所有與副檔名相關聯的媒體類型。支援的副檔名和相關媒體類型的列表可以在 IANA 網站上找到。

也可以明確地為副檔名配置授權的媒體類型。

在以下範例中,允許的媒體類型已針對 xmltxt 副檔名明確設定,並且允許 jpg 的所有相關聯媒體類型

1
2
3
4
5
[
    'xml' => ['text/xml', 'application/xml'],
    'txt' => 'text/plain',
    'jpg',
]

disallowEmptyMessage

類型string 預設值不允許空檔案。

此限制條件檢查上傳的檔案是否為空(即 0 位元組)。如果是,則會顯示此訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ file }} 絕對檔案路徑
{{ name }} 基礎檔案名稱

groups

類型array | string 預設值null

它定義此限制條件的驗證群組。閱讀更多關於驗證群組的資訊。

maxSize

類型mixed

如果設定,為了使其有效,基礎檔案的大小必須低於此檔案大小。檔案大小可以用以下格式之一給定

後綴 單位名稱 範例
(無) 位元組 1 位元組 4096
k 千位元組 1,000 位元組 200k
M 百萬位元組 1,000,000 位元組 2M
Ki 千位元組 (二進位) 1,024 位元組 32Ki
Mi 百萬位元組 (二進位) 1,048,576 位元組 8Mi

有關二進位和 SI 字首之間差異的更多資訊,請參閱 Wikipedia:二進位字首

maxSizeMessage

類型string 預設值檔案太大 ({{ size }} {{ suffix }})。允許的最大大小為 {{ limit }} {{ suffix }}.

如果檔案大於 maxSize 選項,則顯示的訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ file }} 絕對檔案路徑
{{ limit }} 允許的最大檔案大小
{{ name }} 基礎檔案名稱
{{ size }} 給定檔案的檔案大小
{{ suffix }} 使用的檔案大小單位的後綴(請參閱上文)

mimeTypes

類型arraystring

警告

您應該始終使用 extensions 選項而不是 mimeTypes,除非您明確不想檢查檔案的副檔名是否與其內容一致(這可能是一個安全問題)。

預設情況下,extensions 選項也會檢查檔案的媒體類型。

如果設定,驗證器將檢查基礎檔案的媒體類型(以前稱為 MIME 類型)是否等於給定的 mime 類型(如果是字串),或是否存在於給定的 mime 類型集合中(如果是陣列)。

您可以在 IANA 網站上找到現有 mime 類型的列表。

注意

FileType field 欄位上使用此限制條件時,mimeTypes 選項的值也會用於相關的 <input type="file"> HTML 元素的 accept 屬性中。

只有在使用表單類型猜測(即表單類型未在表單建構器的 ->add() 方法中明確定義)且欄位未定義其自己的 accept 值時,才會應用此行為。

filenameMaxLength

類型integer 預設值null

如果設定,驗證器將檢查基礎檔案的檔案名稱是否未超過特定長度。

filenameTooLongMessage

類型string 預設值檔案名稱太長。應少於 {{ filename_max_length }} 個字元。|檔案名稱太長。應少於 {{ filename_max_length }} 個字元。

如果檔案的檔案名稱超過 filenameMaxLength 選項設定的限制,則顯示的訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ filename_max_length }} 允許的最大字元數

extensionsMessage

類型string 預設值檔案的副檔名無效 ({{ extension }})。允許的副檔名為 {{ extensions }}.

如果檔案的副檔名不是 extensions 選項中定義的有效副檔名,則顯示的訊息。

參數 描述
{{ extension }} 給定檔案的副檔名
{{ extensions }} 允許的檔案副檔名列表

mimeTypesMessage

類型string 預設值檔案的 mime 類型無效 ({{ type }})。允許的 mime 類型為 {{ types }}.

如果檔案的媒體類型不是 mimeTypes 選項中定義的有效媒體類型,則顯示的訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ file }} 絕對檔案路徑
{{ name }} 基礎檔案名稱
{{ type }} 給定檔案的 MIME 類型
{{ types }} 允許的 MIME 類型列表

notFoundMessage

類型string 預設值找不到檔案。

如果在給定路徑找不到任何檔案,則顯示的訊息。只有當基礎值為字串路徑時,才可能發生此錯誤,因為 File 物件無法使用無效的檔案路徑建構。

您可以在此訊息中使用以下參數

參數 描述
{{ file }} 絕對檔案路徑

notReadableMessage

類型string 預設值檔案不可讀。

如果檔案存在,但將檔案路徑傳遞給 PHP is_readable() 函數時失敗,則顯示的訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ file }} 絕對檔案路徑

payload

類型mixed 預設值null

此選項可用於將任意特定領域的資料附加到限制條件。配置的 payload 不會被 Validator 元件使用,但其處理完全取決於您。

例如,您可能希望使用多個錯誤級別,以便根據錯誤的嚴重性在前端以不同方式呈現失敗的限制條件。

uploadCantWriteErrorMessage

類型string 預設值無法將暫存檔寫入磁碟。

如果上傳的檔案無法儲存在暫存資料夾中,則顯示的訊息。

此訊息沒有參數。

uploadErrorMessage

類型string 預設值檔案無法上傳。

如果上傳的檔案因不明原因而無法上傳,則顯示的訊息。

此訊息沒有參數。

uploadExtensionErrorMessage

類型string 預設值PHP 擴充功能導致上傳失敗。

如果 PHP 擴充功能導致檔案上傳失敗,則顯示的訊息。

此訊息沒有參數。

uploadFormSizeErrorMessage

類型string 預設值檔案太大。

如果上傳的檔案大於 HTML 檔案輸入欄位允許的大小,則顯示的訊息。

此訊息沒有參數。

uploadIniSizeErrorMessage

類型string 預設值檔案太大。允許的最大大小為 {{ limit }} {{ suffix }}.

如果上傳的檔案大於 upload_max_filesize php.ini 設定,則顯示的訊息。

您可以在此訊息中使用以下參數

參數 描述
{{ limit }} 允許的最大檔案大小
{{ suffix }} 使用的檔案大小單位的後綴(請參閱上文)

uploadNoFileErrorMessage

類型string 預設值沒有檔案被上傳。

如果沒有檔案被上傳,則顯示的訊息。

此訊息沒有參數。

uploadNoTmpDirErrorMessage

類型string 預設值php.ini 中未配置暫存資料夾。

如果 php.ini 設定 upload_tmp_dir 遺失,則顯示的訊息。

此訊息沒有參數。

uploadPartialErrorMessage

類型string 預設值檔案僅部分上傳。

如果上傳的檔案僅部分上傳,則顯示的訊息。

此訊息沒有參數。

本作品,包括程式碼範例,皆以創用 CC BY-SA 3.0 授權條款授權。
目錄
    版本