[php] Laravel에서 배열의 유효성을 검사하는 방법은 무엇입니까?
Laravel에서 어레이 POST의 유효성을 검사하려고합니다.
$validator = Validator::make($request->all(), [
"name.*" => 'required|distinct|min:3',
"amount.*" => 'required|integer|min:1',
"description.*" => "required|string"
]);
내가 POST를 비우고이 얻을 전송 if ($validator->fails()) {}
로 False
. 유효성 검사가 사실이지만 그렇지 않다는 것을 의미합니다.
Laravel에서 배열의 유효성을 검사하는 방법은 무엇입니까? 양식을 제출할 때input name="name[]"
답변
별표 기호 (*)는 배열 자체가 아니라 배열의 값 을 확인하는 데 사용 됩니다.
$validator = Validator::make($request->all(), [
"names" => "required|array|min:3",
"names.*" => "required|string|distinct|min:3",
]);
위의 예에서 :
- “이름”은 요소가 3 개 이상인 배열이어야합니다.
- “names”배열의 값 은 3 자 이상의 고유 한 (고유 한) 문자열이어야합니다.
편집 : Laravel 5.5부터 다음과 같이 Request 객체에서 직접 validate () 메서드를 호출 할 수 있습니다.
$data = $request->validate([
"name" => "required|array|min:3",
"name.*" => "required|string|distinct|min:3",
]);
답변
이 배열을 HTML + Vue.js 데이터 그리드 / 테이블의 요청 데이터로 사용합니다.
[0] => Array
(
[item_id] => 1
[item_no] => 3123
[size] => 3e
)
[1] => Array
(
[item_id] => 2
[item_no] => 7688
[size] => 5b
)
그리고 이것을 사용하여 제대로 작동하는지 확인하십시오.
$this->validate($request, [
'*.item_id' => 'required|integer',
'*.item_no' => 'required|integer',
'*.size' => 'required|max:191',
]);
답변
유효성 검사 및 권한 부여 논리를 작성하는 데 권장되는 방법은 해당 논리를 별도의 요청 클래스에 배치하는 것입니다. 이렇게하면 컨트롤러 코드가 깨끗하게 유지됩니다.
을 실행하여 요청 클래스를 만들 수 있습니다 php artisan make:request SomeRequest
.
각 요청 클래스의 rules()
메서드에서 유효성 검사 규칙을 정의합니다.
//SomeRequest.php
public function rules()
{
return [
"name" => [
'required',
'array', // input must be an array
'min:3' // there must be three members in the array
],
"name.*" => [
'required',
'string', // input must be of type string
'distinct', // members of the array must be unique
'min:3' // each string must have min 3 chars
]
];
}
컨트롤러에서 다음과 같이 경로 함수를 작성하십시오.
// SomeController.php
public function store(SomeRequest $request)
{
// Request is already validated before reaching this point.
// Your controller logic goes here.
}
public function update(SomeRequest $request)
{
// It isn't uncommon for the same validation to be required
// in multiple places in the same controller. A request class
// can be beneficial in this way.
}
각 요청 클래스에는 요청 클래스의 정상적인 동작을 수정하기 위해 비즈니스 로직 및 특수 사례를 기반으로 사용자 정의 할 수있는 사전 및 사후 유효성 검사 후크 / 메서드가 함께 제공됩니다.
유사한 유형의 요청 (예 : web
및 api
)에 대해 부모 요청 클래스를 만든 다음 이러한 부모 클래스에 몇 가지 공통 요청 논리를 캡슐화 할 수 있습니다.
답변
조금 더 복잡한 데이터, @Laran과 @Nisal Gunawardana의 답변 혼합
[
{
"foodItemsList":[
{
"id":7,
"price":240,
"quantity":1
},
{
"id":8,
"quantity":1
}],
"price":340,
"customer_id":1
},
{
"foodItemsList":[
{
"id":7,
"quantity":1
},
{
"id":8,
"quantity":1
}],
"customer_id":2
}
]
유효성 검사 규칙은
return [
'*.customer_id' => 'required|numeric|exists:customers,id',
'*.foodItemsList.*.id' => 'required|exists:food_items,id',
'*.foodItemsList.*.quantity' => 'required|numeric',
];
답변
: 여기에 설명 된대로 각 입력에 대한 입력 배열 및 추가 규칙을 통해 루프가 루프 이상 규칙
다음은 몇 가지 코드입니다.
$input = Request::all();
$rules = [];
foreach($input['name'] as $key => $val)
{
$rules['name.'.$key] = 'required|distinct|min:3';
}
$rules['amount'] = 'required|integer|min:1';
$rules['description'] = 'required|string';
$validator = Validator::make($input, $rules);
//Now check validation:
if ($validator->fails())
{
/* do something */
}