laravel 验证更新:必须 'required' 仅当存储记录为空时

laravel validation update: It must 'required' only if stored record is empty

我有一个验证文件:

public function update(request $request, Sight $sight)
   {
     $validator = Validator::make($request->all(), [
         'img' => 'required|image|max:3000',
         ...

必须是'required',如果存储记录中只有'img'字段为空。

可能吗?

尝试使用required_ifrule

例如:

// In the following example the field will be required only if the img
// parameter is empty or null
$validator = Validator::make($request->all(), [
         'img' => 'image|max:3000',
         'field' => 'required_if:img,',
         ...

这是PHP,是动态的。我们有条件和变量以及所有有趣的爵士乐。您控制包含您要使用的所有规则的字符串,并且那里有模型。只需构建您的字符串。

public function update(Request $request, Sight $sight)
{
    $required = $sight->img === null ? 'required|' : '';

    $validator = Validator::make($request->all(), [
        'img' => $required .'image|max:30

这是一种无需扩展任何内容的方法。

Laravel 有时会调用一个验证选项:

在某些情况下,您可能希望 运行 仅当某个字段存在于正在验证的数据中时才对该字段进行验证检查。要快速完成此操作,请将 sometimes 规则添加到您的规则列表中:

$validator = Validator::make($request->all(), [
    'img' => 'sometimes|required|image|max:30',
]);

在上面的示例中,img 字段只有在 $request

中存在时才会被验证

#source https://laravel.com/docs/8.x/validation#validating-when-present