当用户注册完成,且表单信息验证通过后,我们需要做以下两个操作:
- 将用户提交的信息存储到数据库,并重定向到其个人页面;
- 在网页顶部位置显示注册成功的提示信息;
保存用户并重定向
app/Http/Controllers/UsersController.php
validate($request, [
'name' => 'required|max:50',
'email' => 'required|email|unique:users|max:255',
'password' => 'required|confirmed|min:6'
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
return redirect()->route('users.show', [$user]);
}
}
store 方法接受一个 Illuminate\Http\Request
实例参数,我们可以使用该参数来获得用户的所有输入数据。
获取某个字段值:
$name = $request->name;
获取用户输入的所有数据:
$data = $request->all();
用户模型 User::create() 创建成功后会返回一个用户对象,并包含新注册用户的所有信息。我们将新注册用户的所有信息赋值给变量 $user,并通过路由跳转来进行数据绑定。
redirect()->route('users.show', [$user]);
注意这里是一个『约定优于配置』的体现,此时 $user 是 User 模型对象的实例。route() 方法会自动获取 Model 的主键,也就是数据表 users 的主键 id,以上代码等同于:
redirect()->route('users.show', [$user->id]);
消息提示
在页面顶部位置显示注册成功的提示信息。
app/Http/Controllers/UsersController.php
validate($request, [
'name' => 'required|max:50',
'email' => 'required|email|unique:users|max:255',
'password' => 'required|confirmed|min:6'
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');
return redirect()->route('users.show', [$user]);
}
}
由于 HTTP 协议是无状态的,所以 Laravel 提供了一种用于临时保存用户数据的方法 - 会话(Session),并附带支持多种会话后端驱动,可通过统一的 API 进行使用。
我们可以使用 session() 方法来访问会话实例。而当我们想存入一条缓存的数据,让它只在下一次的请求内有效时,则可以使用 flash 方法。flash 方法接收两个参数,第一个为会话的键,第二个为会话的值,我们可以通过下面这行代码的为会话赋值。
session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');
之后我们可以使用 session()->get('success') 通过键名来取出对应会话中的数据,取出的结果为 欢迎,您将在这里开启一段新的旅程~
。
接下来的消息提示我们会用会话进行闪存,并分别为其设定好指定的键。danger, warning, success, info 这四个键名在 Bootstrap 分别具有不同样式展现效果,因此后面我们将使用这几个键名作为消息提示的专有设定。
现在让我们加入消息提醒视图,让会话消息在视图上进行展示。
resources/views/shared/_messages.blade.php
@foreach (['danger', 'warning', 'success', 'info'] as $msg)
@if(session()->has($msg))
@endif
@endforeach
session()->has($msg) 可用于判断会话中 $msg 键对应的值是否为空,若为空则在页面上不进行显示。最后,我们通过 session()->get($msg) 来取出对应的值并在页面上进行显示。
现在,让我们在全局通用视图中加入消息提醒视图。
resources/views/layouts/default.blade.php
@yield('title', 'Sample App') - Laravel 入门教程
@include('layouts._header')
@include('shared._messages')
@yield('content')
@include('layouts._footer')
当我们再次注册一个验证通过的用户时,能够看到消息提醒在页面上成功展示。