Laravel 5.5在表单验证失败时不显示验证错误

cclgggtu  于 2023-03-04  发布在  其他
关注(0)|答案(4)|浏览(188)

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

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());
vfhzx4xs

vfhzx4xs1#

用这个

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

xtupzzrd2#

首先,您需要使用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);
pn9klfpd

pn9klfpd3#

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

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

klh5stk14#

好吧,对于其他有同样问题的人,让我分享我最初在这里分享的解决方案:www.example.comhttps://github.com/laravel/framework/issues/27729#issuecomment-1442976348
有很多类似的相关问题,这是非常棘手的。
我认为这里是分享我发现的正确线索。
例如,我正在使用一个几个月前从Laravel 5.2更新到5.5的遗留系统,因此请记住,您的问题可能有所不同。
最初我认为这可能是由于中间件的设置,更多关于这一点在下面的链接:

在几个小时没有成功或任何真正有用的东西之后,我决定用Laravel 5. 2挖掘旧代码。
他们改变了ValidatesRequests trait的行为,不仅仅是,主要是改变了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);
        }
    }

弄明白后,我回到了文件,没有发现任何相关的。

  • https://laravel.com/docs/5.5/upgrade#upgrade-5.5.0

无论如何,在5.5之后,如果您想将错误和输入发送到视图,而不是只执行return back();,您将需要使用类似return back()->withInput()->withErrors($exception->validator ?? '');的内容。
或者,您可以使用5.2中的旧代码创建一个自定义trait(可能将两者结合起来),并将ValidatesRequests的使用覆盖为CustomValidatesRequests
5.2恢复特征后,错误消息返回到系统。:表情:
尽管如此,请记住这可能会导致其他问题,如果可能的话,最好使用->withInput()->withErrors($exception->validator ?? '');

相关问题