0
我想爲我的管理面板添加一些自定義驗證邏輯,用於文件上傳。現在我的文件字段可以返回Illuminate\Http\UploadedFile
或string|null
,如果文件沒有上傳或更改或任何其他。所以,我做什麼,我創建了一個自定義規則,看起來像這樣:將自定義條件驗證規則添加到相同的屬性
'image' => [
'required',
'admin_file:mimes:jpeg;png,dimensions:min_width=800;min_height=600'
]
我然後解析所有我傳遞參數,而事實是,我自然希望所有的人都適用只有我值是UploadedFile
的一個實例。我用下面的代碼爲我的自定義驗證:
class AdminFileValidator
{
public function validate($attribute, $value, $parameters, Validator $validator)
{
$rules = implode(
"|",
array_map(function($item) {
return str_replace(";", ",", $item);
}, $parameters)
);
$validator->sometimes($attribute, $rules, function() use ($value) {
return $value instanceof UploadedFile;
});
return true;
}
}
的問題是,通過sometimes
增加額外的規則屬性不會按照這種方式,這些添加的規則不被供驗證處理。
我想問,有沒有什麼辦法來驗證這些規則沒有手動重新驗證整個事情?
它誠實是沒有意義的,你爲什麼會想爲此創建一個自定義驗證器。 Laravel附帶'file'規則來檢查文件是否成功上傳。還有一些規則可供選擇。 – Sandeesh
我需要驗證許多不同類型的文件。像文件,圖像,圖像+ pdf等。和MIME規則只接受'UploadedFile'實例,並失敗,如果我傳遞字符串(我無法合理避免,因爲一切都包裹到'FormRequest') – Eternal1
所以你想要一個字符串值被成功處理,而不是拋出一個錯誤?據我所知,規則'文件','mimetypes','mimes'以及'有時候'正好是你所需要的,除了字符串的限制。我不確定你是如何在一個表單文件輸入中得到一個字符串的。 – Sandeesh