Laravel 5.2验证错误未出现

use*_*337 2 php validation laravel laravel-5 laravel-5.2

我试图让验证错误显示在Laravel中.

我有一个UserController设置如下:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;
//Use Request;
Use Flash;
Use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }

    public function store(Request $request) {
        $this->validate($request, [
            'email' => 'required|unique:users|email|max:255',
        ]);

        if($this) {

        $input = Request::all();

        User::create($input);

        return redirect('/');

        }
        else {

            return redirect('/')->withErrors($validator);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来(layout.blade.php),我已经包括:

@if (count($errors) > 0)
@foreach ($errors->all() as $error)
   {{!! $errors !!}}
@endforeach
@endif
Run Code Online (Sandbox Code Playgroud)

考虑到路线,我有:

Route::group(['middleware' => ['web']], function () {
    Route::get('/', function (){
        return view('home');
    });
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我输入不应该验证的"坏"数据时,我没有看到任何错误(但它没有存储在数据库中,所以就是这样).

另外注意,当渲染刀片模板时,我看到一个额外的"}"括号,我不知道为什么会出现这种情况.

Mir*_* Vu 17

在laravel版本5.2.41中,中间件Web被抛弃.

意味着在里面添加路线Route::group(['middleware' => ['web']], function () {会使验证无效.

  • 我的天啊!我花了差不多一个小时试图解决这个问题直到我写完你的信息.这是完全正确的!我正在学习几个月前的教程,他们仍然使用我发现有趣的"中间件网络",因为当我创建我的Laravel项目时,这样的东西不在route.php文件中.我刚把它取下来并按原样放回去,我现在能够读出我的错误.谢谢! (3认同)

Log*_*ley 6

有几件事情错了,或者可以在这里改进.UserController上的store方法有很多奇怪的问题.$this将永远是真的,因为对象在PHP中是真的.此外,您传递$validatorwithErrors其中没有任何意义,因为没有变量validator.

public function store(Request $request) {
    $this->validate($request, [
        'email' => 'required|unique:users|email|max:255',
    ]);

    User::create(Request::all());
    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)

如果存在验证错误,该validate方法将抛出Illuminate\Foundation\Validation\ValidationException.此异常应列在$dontReport实例变量中App\Exceptions\Handler,如下所示:

protected $dontReport = [
    AuthorizationException::class,
    HttpException::class,
    ModelNotFoundException::class,
    ValidationException::class,
];
Run Code Online (Sandbox Code Playgroud)

如果您更改了这些值,删除或修改了该ValidatesRequest特征,则可能会破坏此功能.

您的错误报告代码也不正确:

@foreach ($errors->all() as $error)
   {!! $errors->first() !!}
@endforeach
Run Code Online (Sandbox Code Playgroud)

这里有3个变化.首先,我删除了外部错误大小检查,这并没有真正得到任何东西.接下来,我修复了你的额外}错误,取消转义数据的语法是{!! $errors->first() !!}.最后,我调用->first()它返回与该特定字段关联的第一个错误.

我认为重要的是要注意验证异常将创建对上一页的重定向响应.可以在中找到确定上一页的逻辑Illuminate\Routing\UrlGenerator::previous().