Laravel 验证的最佳实践

Sam*_*Omr 1 php api laravel laravel-5.8 laravel-6.2

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

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

然后我面临逻辑问题

  1. 更新方法中是否需要store 方法中需要的所有字段?

    => 这里的问题是 API 的消费者是否应该发送所有密钥对象来更新特定密钥

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

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

那么请问最好的做法是什么?

Pra*_*rji 5

欢迎使用 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")
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

在用户控制器中

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
    }
}
Run Code Online (Sandbox Code Playgroud)

希望它有帮助。