6.1.1 创建权限控制器
php think make:controller Auth --plain
6.1.2 创建路由(注意:删除要加token
验证):
Route::get('login','Auth/create')->name('login.create');
Route::post('login','Auth/save')->name('login.save');
Route::delete('login','Auth/logout')->name('logout');
就是在这里出的问题,没有分清get,post,delete
。
6.1.3 在Auth.php
中创建控制器方法(待完善):
//用于显示登录页面
public function create(){
return view();
}
public function save(){
}
public function logout(){
}
后面先不写东西。
6.1.4 在view里面创建文件夹auth
,附带同名html模板,要继承默认模板。
6.2 登录页面,用邮箱登录,可以修改注册页模板。
6.3.1 记录旧的表单输入记录,就是刚刚输入的内容,在注册出现问题时,有更改的余地,尤其是输入的内容比较多时,在controller
,User.php
中:
//记录旧表单输入记录
session('old',$request->post());
6.3.2 在模板视图user下修改create.html
,记录一下:
<div class="mb-3">
<label for="name" class="form-label">用户名:</label>
<input type="text" required maxlength="255" value="{:session('old.name')}" class="form-control" placeholder="请输入用户名" id="name" name="name">
</div>
<div class="mb-3">
<label for="email" class="form-label">电子邮箱:</label>
<input type="email" required maxlength="255" value="{:session('old.email')}" class="form-control" placeholder="请输入您的电子邮箱" id="email" name="email">
</div>
6.4 登录验证
6.4.1 将User.php
的验证内容直接复制到Auth.php
:
public function save(Request $request)
{
try {
validate(UserValidate::class)->batch()->check($request->post());
$user = new UserModel();
$user->name = $request->post('name');
$user->email = $request->post('email');
$user->password = sha1($request->post('password').getSalt());
$user->save();
/* $data = $request->post();
$data['password'] = sha1($request->post('password').getSalt());
$user = UserModel::create($data,['name','email','password']);*/
return redirect((string) url('User/read',['id' => $user->id]))->with('success','恭喜您,注册成功!');
} catch (ValidateException $e) {
//记录旧表单输入记录
session('old',$request->post());
// 验证失败
// dump($e->getError()); // 输出错误信息
if(!empty($errors = $e->getError())){
session('errors',$errors);
}
return redirect((string)url('User/create'));
}
}
注意:类要一起引入:
use app\model\User as UserModel;
use app\Request;
use app\validate\UserValidate;
use think\exception\ValidateException;
6.4.2改为:
public function save(Request $request)
{
try {
validate([
'email|邮箱账号' => 'require|email|max:255',
'password|密码' => 'require|min:6'
])->batch()->check($request->post());
// return redirect((string) url('User/read',['id' => $user->id]))->with('success','恭喜您,注册成功!');
} catch (ValidateException $e) {
//记录旧表单输入记录
session('old',$request->post());
if(!empty($errors = $e->getError())){
session('errors',$errors);
}
return redirect((string)url('login.create'));
}
}
6.4.3 查看登录页,修改:
一个复制粘贴失误,导致都不能用了,真悲催啊,关键还解决不了。这个逻辑太强了。
从头来!
今晚修复,主要问题见上面。