如果表单验证失败,Laravel 5.5 不会显示验证错误

问题描述 投票:0回答:4

我正在尝试显示表单错误以防表单验证失败。一切正常,表单已正确验证,但不会在视图中显示表单错误。每次返回一个空数组作为错误。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class HomeController extends Controller
{
    public function storeProjectDetails(Request $request)
   {
    $messages = [
        'title.required' => 'Please enter trip title',
        'title.max' => 'Only 254 characters are allowed as trip title',
        'startDate.required' => 'Please enter trip start date',
        'startDate.date' => 'Only date formats are allowed as start date',
        'endDate.required' => 'Please enter trip end date',
        'endDate.date' => 'Only date formats are allowed as end date',
    ];

    $this->validate($request,[
        'title' => 'required|string|max:254',
        'startDate' => 'required|date',
        'endDate' => 'required|date',
    ]);

  }
}

景色:

  print_r($errors->all());
laravel laravel-5.5
4个回答
0
投票

用过这个

@if($errors->has())
   @foreach ($errors->all() as $error)
      <div>{{ $error }}</div>
  @endforeach
@endif

0
投票

首先您需要使用

if
条件检查错误然后您需要使用下面给出的循环打印错误

@if ($errors->any())
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
@endif

在您的情况下,您缺少在控制器中返回错误数组。尝试下面给出的验证检查。

$this->validate($request,[
        'title' => 'required|string|max:254',
        'startDate' => 'required|date',
        'endDate' => 'required|date',
    ], $messages);

0
投票

您正在以错误的格式构建消息数组,它应该如下所示:

$messages = [
    'required' => 'Please enter :attribute',
    'date' => 'Only date formats are allowed as :attribute',
    ...
];

0
投票

好吧,对于有同样问题的其他人,让我分享我最初在这里分享的解决方案:https://github.com/laravel/framework/issues/27729#issuecomment-1442976348

有很多类似的相关问题变得非常棘手。

我认为这是分享我发现的正确主题。


例如,我在几个月前从 Laravel 5.2 更新到 5.5 的遗留系统中工作,所以请记住,您的问题可能有所不同。

最初我认为这可能是由于中间件的设置所致,更多信息请参见以下链接:


几个小时后没有成功或任何真正有用的东西,我决定用 Laravel 5.2 挖掘旧代码。

好吧,他们改变了

ValidatesRequests
特质的行为。不仅如此,主要是功能
validate

// 5.5
    public function validate(Request $request, array $rules,
                             array $messages = [], array $customAttributes = [])
    {
        $this->getValidationFactory()
             ->make($request->all(), $rules, $messages, $customAttributes)
             ->validate();

        return $this->extractInputFromRules($request, $rules);
    }
// 5.2 - I didn't look carefully, but it seems that wasn't changed until 5.4
    public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
    {
        $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);

        if ($validator->fails()) {
            $this->throwValidationException($request, $validator);
        }
    }

弄清楚之后,我回到文档并没有找到与此相关的任何内容。

image

无论如何,似乎在

5.5
之后如果你想将错误和输入发送到视图,而不是只做
return back();
,你需要使用像
return back()->withInput()->withErrors($exception->validator ?? '');
这样的东西。

或者,您可以使用

5.2
中的旧代码创建自定义特征(也许将两者结合起来)并覆盖
ValidatesRequests
CustomValidatesRequests
的使用。

5.2
恢复特征后,错误消息返回到系统。 :笑脸:

尽管如此,请记住这可能会导致其他问题,如果可能的话最好使用

->withInput()->withErrors($exception->validator ?? '');
.

© www.soinside.com 2019 - 2024. All rights reserved.