我的首页上有一个注册表单,目的是检查是否已经创建了用户,如果用户已经存在,则显示一条错误消息,表明已经使用给定值创建了用户。
我的RegisterController创建方法现在看起来像这样:
public function create(Request $request) {
$create = User::create([
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password']),
]);
if($create){
Company::create(['user_id' => $create->id]);
return redirect('/dashboard');
}
}
如何检查用户是否已经创建,如果是,则显示错误消息?
在控制器中:
$request->validate([
'email' => 'required|unique:database_table,column'
])->messages([
'email.unique' => 'User has already been registered.',
]);
那么在你看来:
@if($errors->any())
@foreach($errors->all() as $error)
{{ $error }}
@endforeach
@endif
您可以使用firstOrCreate方法。
基于laravel文档。
firstOrCreate方法将尝试使用给定的列/值对定位数据库记录。如果在数据库中找不到模型,将插入一条记录,其中包含第一个参数中的属性,以及可选的第二个参数中
第一个参数应该是匹配值对
例如:['email'=>$request['emaile']]
第二个参数是将插入数据库的值
$user = User::firstOrCreate(['email' => $request['email']]
,[
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password']),
]);
if ($user) {
// records found
}
阅读此处的文档
在将注册数据存储到数据库之前和之后,我会做更多的工作,但对于验证,您可以使用Laravel验证。这是一个示例:
public function create(Request $request) {
$request->validate(
[
'email' => 'required|string|email|max:255|unique:users',
'paypal_email' => 'required|string|paypal_email|max:255|unique:users',
'password' => 'required|string|min:6'
]
);
$create = User::create([
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password'])
]);
if($create){
Company::create(['user_id' => $create->id]);
return redirect('/dashboard');
}
}
在视图中,验证错误可以像一样呈现
<!-- /resources/views/post/create.blade.php -->
<h1>Create Post</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<!-- Create Post Form -->
参考:Laravel 5.8验证