laravel5.8|자신의 발리를 만드는 날!
개요
라벨의 발리 데이로 어려운 특별한 발리 데이를 커버하고 싶을 때, 독특한 발리 데이를 만들어 사용자 정의!
이번에는 두 가지 유형에 대한 검증...
• 벽장 사용
· Rule 객체 작성
컨디션
・laavel5.8
・php7.2
모드1: 크랑의 발리
예를 들어 합계금액
amount
, 사전지급prepayment
, 이용점point
일 때는 합계금액이 줄지 않기를 바란다.public function rules()
{
return [
'amount' => 'required|integer',
'prepayment' => 'required|integer',
'point' => ['required','integer',
function($attribute, $value, $fail) {
// 入力の取得
$inputData = $this->all();
if (($inputData['amount'] - $inputData['prepayment'] - $inputData['point']) < 0)
{
$fail('合計金額が、事前払い、または利用ポイントより多くなるようにしてください。');
}
}],
];
}
💡withValidator의 애프터를 사용하면 마지막으로 하고 싶은 발리의 날을 쓸 수 있다마지막으로 발리데이를 원하는 조건이 있거나 위에 쓴 글씨가 엉망진창이어서 싫을 때 편리할 수 있다.
public function rules()
{
return [
'amount' => 'required|integer',
'prepayment' => 'required|integer',
'point' => 'required|integer'
];
}
public function withValidator(\Validator $validator) : void
{
if ($validator->fails()) {
return;
} // bailと同じ効果
$validator->after(function ($validator) {
$inputData = $this->all();
if (($inputData['amount'] - $inputData['prepayment'] - $inputData['point']) < 0)
{
$validator->errors()->add('error', '合計金額が、事前払い、または利用ポイントより多くなるようにしてください。');
}
});
}
모드 2: Rule 객체 작성
상품 판매 사이트에는 데이터베이스에 점포와 상품의 표가 일대다 관계로 존재하기 때문에 점포에 따라 판매하는 상품이 다르면 요구에 따라 발송하는 점포+상품의 조합으로 판매할 수 있습니까?예를 들다.
use App\Facility;
use Illuminate\Contracts\Validation\Rule;
class FacilityAndItemPatternExists implements Rule
{
protected $itemName;
public function __construct(int $facilityId)
{
$facility = new Facility;
$this->itemName = $facility->where('facility_id', $facilityId)
->join('items', 'facilities.item_id', '=', 'items.id')
->pluck('items.name')
->toArray();
}
public function passes($attribute, $value)
{
return in_array($value, $this->itemName, true);
}
public function message()
{
return ':attributeは選択できません。';
}
}
이번의 예는 매번 데이터베이스를 보러 가는 것이기 때문에 다른 문제가 있다...(`)복잡한 패턴을 지정할 수 있습니다.
💡호출 방식
사용 빈도가 높은 경우 서비스 제공자에 등록되지만 서비스 제공자에 등록되지 않는 경우
public function shopValidationRules($arr)
{
return \Validator::make($arr, [
'facility_id' => 'required|integer',
'item_name' => ['required', 'integer', new FacilityAndItemPatternExists($arr['facilityId'])],
'detail' => 'nullable|string'
],[
'required' => ':attributeが入力されていません。',
'integer' => ':attributeは数値を入力してください。'
],[
'facility_id' => '施設',
'item_name' => '商品',
'detail' => '詳細'
]);
}
validator:make의 경우 4 인자에서 이번 검증의attribute 이름을 설정할 수 있습니다.네 번째 파라미터가 없는 경우validation입니다.php 등에서 지정한attribute 이름입니다.💡보태다
Rule 객체의 경우 여러 조건에서 확인할 수 있습니다.🌙
public function passes($attribute, $value)
{
// ユーザー権限によってエラーをスルー
if (\Gate::allows('system-manager')) {
return true;
}
// 店舗名が存在しているか
if (in_array($value, $facilityNames, true)) {
return true;
}
// 全てに該当しない
return false;
}
Rule 객체의 예제 내용은 많지 않을 수 있지만 외부 데이터를 가져와 DB에 저장할 때 복잡한 검증을 설정할 수 있어 매우 편리합니다.◇나는 발리에서 사용자가 발리의 내용을 바꾸고 싶을 때 게이트를 설정하면 간단하게 재미를 실현할 수 있다고 생각한다̈
Reference
이 문제에 관하여(laravel5.8|자신의 발리를 만드는 날!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/fuwakani/articles/0b9c3f7ba2690c58ba95텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)