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 () {会使验证无效.
有几件事情错了,或者可以在这里改进.UserController上的store方法有很多奇怪的问题.$this将永远是真的,因为对象在PHP中是真的.此外,您传递$validator到withErrors其中没有任何意义,因为没有变量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().
| 归档时间: |
|
| 查看次数: |
13534 次 |
| 最近记录: |