총 업로드 파일 크기에 대한 맞춤형 Laravel 유효성 검사 규칙 생성 🚫✅
업로드된 파일 배열의 유효성을 검사하는 가장 좋은 방법을 찾고 있었고 StackOverFlow에서 솔루션의 큰 부분을 찾았지만 문제는 이 솔루션이 거의 5년이 되었다는 것입니다. 그래서 몇 분 동안 목표를 달성한 방법에 대한 빠른 자습서를 작성하고 StackOverFlow에서 찾은 솔루션의 영향을 받은 나만의 사용자 지정 유효성 검사 규칙을 만들기로 결정했습니다.
시작하자 🚀
내용의 테이블
1- Input
2- Routes
3- Validation
4- Custom validation
1- 입력:
This is a simple HTML input tag that supports specific picture formats as well as multiple file uploads. The input is wrapped with a form that POST the files to the 'images/upload route.'
<form action="images/upload" method="POST">
<input
type="file"
id="thumbnail"
name="thumbnail"
class="h-full w-full z-50 opacity-0 cursor-pointer"
accept="image/png, image/jpeg, image/jpg, image/gif, image/webp"
multiple
required
/>
</form>
2- 경로:
In routes/web.php
file, we're using the ImageUploadController@store to handle post requests to this route.
Route::post('images/upload', [ImageUploadController::class, 'store'])->name('images.upload');
3- 검증:
I usually don't ever do any validation within my controller, I follow the documentationphp artisan make:request StoreImagesRequest
으로 새 요청을 생성한 다음 아래와 같이 유효성 검사를 추가합니다. public function rules()
{
return [
'images' => ['bail', 'required'],
'images.*' => ['bail', 'image', 'mimes:jpeg,jpg,png,gif,webp']
];
}
컨트롤러 저장소 메서드 내에서 유효성 검사를 수행하는 것은 중요하지 않습니다. 내 솔루션은 어느 쪽이든 작동합니다.
다음 단계는
php artisan make:rule Maxsize --invokable
명령을 실행하고 app/Rules/Maxsize
파일로 이동해야 합니다.A rule object contains a single method: __invoke. This method receives the attribute name, its value, and a callback that should be invoked on failure with the validation error message.
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\InvokableRule;
class Maxsize implements InvokableRule
{
/**
* Run the validation rule.
*
* @param string $attribute
* @param mixed $value
* @param \Closure $fail
* @return void
*/
public function __invoke($attribute, $value, $fail)
{
// Logic goes here
}
}
위의 코드는 Attribute, Value 및 Fail을 수신하는 빈 규칙을 보여줍니다. 호출된 함수에 유효성 검사 논리를 코딩하고 실패할 경우 응답을 전달하기만 하면 됩니다. 우리의 경우와 같이 속성을 지정하지 않은 경우 '$attribute' 변수를 무시하십시오. 입력 데이터는 '$value' 변수에 저장되며 '$fail' 변수에 문자열 응답을 할당하여 유효성 검사가 실패할 경우 응답을 정의할 수 있습니다.
이제 우리의 목표로 돌아가자. 여기서 우리가 하려는 것은 파일 배열을 반복하고 각 파일의 총 파일 크기를 계산한 다음 결과가 10.000KB보다 크면 실패 응답을 보내는 것입니다.
이를 위해 을 사용할 것입니다.
array_reduce — Iteratively reduce the array to a single value using a callback function
public function __invoke($attribute, $value, $fail)
{
$total_size = array_reduce($value, function ($sum, $item) {
// each item is UploadedFile Object
$sum += filesize($item->path());
return $sum;
});
if ($total_size > 10000 * 1000) {
$fail('Total images size should be maximum 10 Megabytes');
}
}
이 코드에서는 총 파일 크기를 계산하여 배열에서 단일 값을 반환합니다. 각 파일 크기를 계산하기 위해 을 사용하고 Laravel의 Following the 을 사용하여 파일 경로를 전달합니다.
그런 다음 총 크기가 10mb 이상인지 확인하고
path()
변수 값을 반환합니다.이제 유효성 검사에 사용하는 모든 위치(제 경우에는
$fail
)로 가져와서 유효성 검사 규칙을 사용할 수 있습니다.<?php
namespace App\Http\Requests;
use App\Rules\Maxsize;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class StoreImagesRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'images' => ['bail', 'required', new Maxsize],
'images.*' => ['bail', 'image', 'mimes:jpeg,jpg,png,gif,webp']
];
}
}
명쾌한 설명이 되었기를 바라며 궁금한 점이 있으면 댓글로 알려주세요 👋
Reference
이 문제에 관하여(총 업로드 파일 크기에 대한 맞춤형 Laravel 유효성 검사 규칙 생성 🚫✅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/moose_said/create-custom-laravel-validation-rule-for-total-uploaded-files-size-1odb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)