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에 저장할 때 복잡한 검증을 설정할 수 있어 매우 편리합니다.◇
나는 발리에서 사용자가 발리의 내용을 바꾸고 싶을 때 게이트를 설정하면 간단하게 재미를 실현할 수 있다고 생각한다̈

좋은 웹페이지 즐겨찾기