0

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

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

然后我面临逻辑问题

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

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

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

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

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

4

3 回答 3

4

Laravel 中有多种验证数据的方法。

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

假设我们有一个用户模型,并且需要一个名称以及控制器的唯一方法storeupdate方法,您可以简单地使用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 a request is for store or update just take autoincremented id parameter from 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 store(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
    }
}
于 2020-02-06T13:20:32.160 回答
1

您可以使用以下方法执行此操作:

$this->validate(
    $request,
    [
        'YOUR INPUT FIELD NAME' => 'required',
    ]
);

你也可以$request->validate()从 Laravel 5.5+ 开始使用:

$request->validate(
    [
        'YOUR INPUT FIELD NAME' => 'required',
    ]
);
于 2020-02-06T12:40:30.973 回答
-1
$validator = Validator::make($request->all(), [
    'phone' => 'sometimes|max:255',
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255',
    'pic_file' => 'sometimes|mimes:jpg,png,jpeg,gif|max:1000',
]);

if ($validator->fails()) {
    return redirect('/')->withErrors($validator);
}
于 2020-02-06T12:45:09.727 回答