【问题标题】:Handling validation errors coming from a Request处理来自请求的验证错误
【发布时间】:2021-06-02 00:51:43
【问题描述】:

我在处理错误时遇到了一些问题。

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

  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

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

【问题讨论】:

  • 您是否将 authorize() 函数的默认值更改为 true?默认情况下,CustomerFornRequest 在 Laravel 中带有 false 值。
  • 是的,这是真的

标签: laravel


【解决方案1】:

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

方法:-1

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

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

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

或者你也可以像下面这样定义另一个方法(for get validation error in controller function),

方法:-2

步骤:1- 包含验证器类

use Illuminate\Support\Facades\Validator;

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

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

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

【讨论】:

  • 我想保持代码干净并使用自定义请求。没有办法使用 Request 访问错误?
  • stackoverflow.com/questions/28793716/…看看这个问题,希望对你有帮助
  • dishValidate $request 这包含验证。我们不会在控制器中用Validator::make($再次定义它
【解决方案2】:

我解决了。显然我很愚蠢,我在错误的刀片文件中花了 1.5 小时。

自定义请求一切正常。

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多