laravel5.7 电商对提交参数进行校验方法流程

对于电商开发有的时候对提交的数据进行必要的校验,有利于减少程序的压力,并且可以返回必要的信息,能够知道那些数据参数的类型、大小、格式等等做这样或者那样的校验,然后才进行逻辑处理。接下来就是laravel对数据校验的基本流程仅供参考。

1.首先创建 XxxxController

$ php artisan make:controller XxxxController

2.然后创建一个 AddXxxxRequest

$ php artisan make:request AddXxxxRequest

3.我们提交数据的时候会校验两个参数:

1.商品 SKU ID
1.数量
因此要在 AddXxxxRequest 中校验这两个参数:

app/Http/Requests/AddXxxxRequest.php
<?php

namespace App\Http\Requests;

use App\Models\SxxxSku;

class AddCartRequest extends Request
{
    public function rules()
    {
        return [
            'sku_id' => [
                'required',
                function ($attribute, $value, $fail) {
                    if (!$sku = SxxxSku::find($value)) {
                        return $fail('该数据不存在');
                    }
                    if (!$sku->关联关系->on_sale) {
                        return $fail('该数据未上架');
                    }
                    if ($sku->stock === 0) {
                        return $fail('该数据条件不符合');
                    }
                    if ($this->input('amount') > 0 && $sku->stock < $this->input('amount')) {
                        return $fail('该数据条件不符合2');
                    }
                },
            ],
            'amount' => ['required', 'integer', 'min:1'],
        ];
    }

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

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

校验 sku_id 的第二个规则是一个闭包校验规则,这个闭包接受 3 个参数,分别是参数名、参数值和错误回调。

4.接下来我们在 XxxxController 添加一个 add() 方法,参数就是我们刚刚创建的 AddXxxxRequest

app/Http/Controllers/XxxxController.php
use App\Http\Requests\AddXxxxRequest;
use App\Models\XxxxItem;
.
.
.
    public function add(AddXxxxRequest $request)
    {
        $user   = $request->user();
        $skuId  = $request->input('sku_id');
        $amount = $request->input('amount');

        // 从数据库中查询该数据是否已经在关联数据表中
        if ($xxxx = $user->XxxxItems()->where('product_sku_id', $skuId)->first()) {

            // 如果存在则直接叠加数据数量
            $xxxx->update([
                'amount' => $xxxx->amount + $amount,
            ]);
        } else {

            // 否则创建一个新的关联数据车记录
            $xxxx = new XxxxItem(['amount' => $amount]);
            $xxxx->user()->associate($user);
            $xxxx->SsssSku()->associate($skuId);
            $xxxx->save();
        }

        return [];
    }

5. 路由

Route::post('xxxx', 'XxxxController@add')->name('xxxx.add');

对于前端的部分就不说了,大体上laravel后端对于数据的校验就是这样的,接触laravel将近一年的时间中也利用这个框架开发了 两个项目,发现laravel真是一个比较好的框架,它设计结构清晰,应用扩展还比较齐全,而其能够优雅的处理任何异常,最主要的是上手比较容易,以后对于开发来说不断丰富的框架应用扩展会越来越多,使得开发会越来越容易,这是一个趋势。也就是说以后对于开发来说大体上会分为两种开发人员,一种是基于框架应用扩展来开发程序的程序员,另一种将是专门为各大框架开发 应用扩展包的研发人员。30岁的我目前感觉最深刻的就是日趋紧张的就业压力,与前途的迷茫也许坚持不懈下去能让我走的更远……2019年给我自己加油,也为在迷途的你加油!致2019年的你自己+加油 (^_^)/

阅读 149

Comments