首页 > 解决方案 > 分离的 [create] 和 [store] 函数的验证在 Laravel6 中不起作用

问题描述

我正在使用这些代码研究商店数据。此代码可以存储数据但没有验证。所以我正在尝试添加验证部分。实际上,这是我第一次看到分离的 [create] 和 [store] 函数,所以我不确定如何附加 validate 函数。我试图调整代码,但没有奏效。请教我正确的代码好吗?

public function create() {
    $users  = User::All();
    $users  = User::with('products')->get();

    $categoris  = Categori::All();
    $categoris  = Categori::with('products')->get();

    $creators = Creator::All();
    $creators = User::with('products')->get();
    $creators = DB::table('creators')->where('creators.br_no', Auth::user()->br_id)->get();

    $data = array(
        'title'     => request('title'),
        'kansu'     => request('kansu'),
        'categoris' => $categoris,
        'creators'  => $creators,
        'users'  => $users
    );
    return view('product.create',$data);
}

public function store() {
    Product::create([
        'title'         => request('title'),
        'kansu'         => request('kansu'),
        'creator_id'    => request('creator_id'),
        'user_id'   => request('user_id'),
        'br_id'     => request('br_id'),
        'color_id'  => request('color_id'),
        'categori_id'   => request('categori_id')
    ]);
    return redirect('/product/ownbr');
}

我在代码的顶部添加了这个验证

protected function validator(array $data) {
    return Validator::make($data, [
        'creator_id' => 'required|string|max:255',
        'color_id' => 'required|string|max:255',
        'categori_id' => 'required|string|max:255',
        'title' => 'required|string|max:255',
        'kansu' => 'required|string|max:255',
    ]);
}

标签: laravel

解决方案


您可以通过两种方式做到这一点:- 在存储方法的顶部,您可以像这样进行验证:-

  public function store(Request $request)
    {
        $validated = $request->validate([
        'creator_id' => 'required|string|max:255',
        'color_id' => 'required|string|max:255',
        'categori_id' => 'required|string|max:255',
        'title' => 'required|string|max:255',
        'kansu' => 'required|string|max:255',
        ]);
        Product::create([]);
        return redirect('/product/ownbr');
    }

第二种方式,你可以通过这个命令创建表单请求,php artisan make:request ProductRequest。您将在 app/http/requests 中找到此类在规则方法中添加您的验证

public function rules()
{
    return [
            'creator_id' => 'required|string|max:255',
            'color_id' => 'required|string|max:255',
            'categori_id' => 'required|string|max:255',
            'title' => 'required|string|max:255',
            'kansu' => 'required|string|max:255',
    ];
}

在同一个班级中也可以更改:

public function authorize()
{
    return true;
}

然后你可以像这样在你的控制器中使用这个请求:

public function store(ProductRequest $request)
{
    Product::create([

    ]);
}

我推荐第二种方式,因为它将验证过程与控制器分开,这样控制器就更干净了


推荐阅读