在Laravel中从控制器验证传入请求的更好方法是什么?

时间:2019-01-23 14:11:39

标签: php laravel laravel-5 laravel-5.7 laravel-validation

在Laravel中验证传入请求的标准方法如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    /**
     * Show the form to create a new blog post.
     *
     * @return Response
     */
    public function create()
    {
        return view('post.create');
    }

    /**
     * Store a new blog post.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        // The blog post is valid...
    }
}

验证控制器中的请求没有任何问题,但是我如何才能将验证逻辑写出控制器以保持其整洁而不破坏单一职责原则?

2 个答案:

答案 0 :(得分:4)

您可以提出自己的表单请求。

  1. 首先使用php artisan make:request StorePostRequest创建一个请求
  2. 在此类中创建自己的规则,例如:
public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}
  1. 更新您的控制器功能
 public function store(StorePostRequest $request)
    {

        // do something
    }

有关更多信息: https://laravel.com/docs/5.7/validation#creating-form-requests

答案 1 :(得分:3)

使用Laravel提供的表单请求:

https://laravel.com/docs/5.7/validation#creating-form-requests

并确保您的控制器使用ValidatesRequests特性。

在执行控制器动作之前,将对表单请求进行验证,并包含验证规则和授权逻辑。