Request 验证类 特别用法

app/Http/Requests/AddCartRequest.php

<?php

namespace App\Http\Requests;

use App\Models\ProductSku;

class AddCartRequest extends Request
{
    public function rules()
    {
        return [
            'sku_id' => [
                'required',
                function ($attribute, $value, $fail) {
                    if (!$sku = ProductSku::find($value)) {
                        $fail('该商品不存在');
                    }
                    if (!$sku->product->on_sale) {
                        $fail('该商品未上架');
                    }
                    if ($sku->stock === 0) {
                        $fail('该商品已售完');
                    }
                    if (is_int($this->input('amount')) && $sku->stock < $this->input('amount')) {
                        $fail('该商品库存不足');
                    }
                },
            ],
            'amount' => ['required', 'integer', 'min:1'],
        ];
    }

    public function attributes()
    {
        return [
            'amount' => '商品数量'
        ];
    }

    public function messages()
    {
        return [
            'sku_id.required' => '请选择商品'
        ];
    }
}

校验 sku_id 的第二个规则是一个闭包校验规则,这个闭包接受 3 个参数,分别是参数名、参数值和错误回调。在这个闭包里我们依次判断了用户提交的 SKU ID 是否存在、商品是否上架以及库存是否充足。

闭包校验规则允许我们直接通过匿名函数的方式来校验用户输入,比较适合在项目中只使用一次的情况。闭包校验规则在 Laravel 5.5 开始支持,但在 5.6 的文档才有介绍。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值