温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - Best Practice for Laravel Validation
api laravel laravel-5.8 laravel-6.2 php

php - Laravel验证的最佳实践

发布于 2020-04-22 15:37:57

我创建新的表单请求,并将其用于所有CRUD操作

并用于$this->getMethod();检查请求之间的差异

然后我面临逻辑问题

  1. 在update方法中是否要求存储方法要求的所有字段

    =>这里的问题是API的使用者是否应该发送所有键对象以更新特定的键

  2. 如果不应该,并且从API发送的键名称与数据库表列名称不同

    =>我不能使用,update($request()->all());因为该键与列名不同,所以我需要在所有请求键上循环以忽略具有空值的键-也可以通过多次检查来完成-

那么,请问那是什么最佳实践?

查看更多

提问者
Sameh Mohamed Omr
被浏览
34
Prateik Darji 2020-02-06 21:27

欢迎使用Stackoverflow。

laravel中有很多验证方法,

我更喜欢不要在控制器中编写验证并将其写入单独的请求中,并使用该请求对象作为参数。

假设我们具有用户模型,并且在控制器的添加和编辑方法中名称是必需的并且是唯一的,您可以如下所述简单地使用UserRequest对象。

创建请求类

php artisan make:request UserRequest

class UserRequeset extends Request
{
    /**
    * Get the validation rules that apply to the request.
    * @return array
    */
    public function rules()
    {
        $id = request('id') ?: 'NULL'; //To identify if request is for add or edit just take autoincremented id parameter form request.

         return [
             'name' =>'required|unique:users,name,'.$id
         ];


        // you can also customize your validation for different methods as below

        switch ($this->method()){
            case 'POST':
                return [
                    // validation for post method
                ];
            break;
            case 'PUT':
                return [
                    // validation for put method
                ];
            break;
            default:
                return [];
            break;
        }

    }

    public function messages()
    {
        return [
            "name.required" => "User name is required",
            "name.unique" => "User name should be unique"

            // or you can customize this using language

            "name.required" => __("user.required_message"),
            "name.unique" => __("user.unique_message")
        ];
    }
}

在UserController中

use App\Http\Requests\UserRequest;

Class UserController extends Controller {

    public function add(UserRequest $request)
    {
        //Enter your code just after validation part no need of any validation code here
    }
    public function update(UserRequest $request)
    {
        //Enter your update code just after validation part no need of any validation code here
    }
}

希望对您有所帮助。