首页 > 解决方案 > 处理来自请求的验证错误

问题描述

我在处理错误时遇到了一些麻烦。

我提出了一个自定义请求:

  public function rules()
{
    return [
        "name" => "required|min:3|max:50|string",
        "price" => "required|numeric",
        "visibility" => "required",
        "description" => "required|string|min:10|max:50",
        "image_url" => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        "genre" => "required"
        
    ];
}

在我的控制器中,我有:

public function store(dishValidate $request)
{
    $data = $request->validated();

    $file = $request->file('image');
    $extension = $file->getClientOriginalExtension();
    Storage::disk('public')->put($file->getFilename() . '.' . $extension,  File::get($file));

    $dish = new Dish;
    $dish["name"] = $data["name"];
    $dish["description"] = $data["description"];
    $dish["price"] = $data["price"];
    $dish["visibility"] = $data["visibility"];
    $dish["image_url"] = $file->getFilename() . '.' . $extension;

    $dish->getRestaurant()->associate(Auth::User()->getRestaurant->id);
    $dish->getGenre()->associate($data["genre"]);
    $dish->save();
    
    $item = "Hai creato un nuovo piatto con successo!";
    return route("success", compact("item"));
    
}

在我的刀片中:

    @if ($errors->any())
            <div class="alert alert-danger">
                    <ul>
                @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
                @endforeach

我似乎无法访问任何错误。如果验证失败,是否还有办法保留输入?

标签: laravel

解决方案


您可以像这样定义验证规则。

方法:-1

$request->validate([
        'name' => 'required',
        'email' => 'required',
        'img' => 'required | mimes:jpeg,jpg,png',
    ]);

然后在刀片视图文件中,您将使用 $error->all() 返回错误数组

@foreach ($errors->all() as $error)
    <p>{{ $error }}</p>
@endforeach

或者您也可以在另一个方法下面这样定义它(用于在控制器函数中获取验证错误),

方法:-2

步骤:1-包括验证器类

use Illuminate\Support\Facades\Validator;

第 2 步:在控制器函数中定义规则

$validator = Validator::make($request->all(), [
        'name' => 'required',
        'email' => 'required|email',
        'password' => 'required',
        'c_password' => 'required|same:password',
    ]);
print_r($$validator->messages());

如果您想在 API 中进行验证,我建议使用方法 2。


推荐阅读