php–laravel框架注册
要想使用laravel框架,我这里总结了laravel框架的基本的3要素。
- 在route目录下定义路由,定义路由的方式:get,post,any,resource,match小编这里简单的一下。
- 根据刚刚创建好的路由,创建控制器Controller,建议使用php artisan创建,在控制器里面写对应的业务逻辑。
- 创建需要的视图文件,index.blade.php
1,注册路由
a,小编这里注册路由使用了laravel的中间件,如果还有小伙伴不了解中间件,可以去laravel中文网laravel中文网去查看。
使用路由组定义路由,方便操作
Route::group(['namespace'=>'Admin','prefix'=>'admins'],function (){
//注册路由
Route::match(['get','post'],'register','RegisterController@register');
});
2,注册控制器
a,利用laravel的表单验证进行请求的数据判断,是否合理。
b,利用laravel自带的发送邮件,进行用户激活,如果不会发送邮件,请查看小编的这篇文章laravel5.3发送邮件
c,前端利用ajax发送请求。
4,验证码使用laravel框架自带的,网上教程一大把,这里就不阐述了。需要 php artisan 安装。参考小编的验证码安装laravel5.3验证码安装
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
class RegisterController extends Controller
{
//注册路由
function register(Request $request){
//var_dump(captcha_img('flat'));die();
if ($request->isMethod('GET')){
return view('admin.registerLogin');
}else{
//接收数据
$values = $request->all();
//验证规则
$rules = [
'email'=>'required|unique:user,email|email',
'user'=>'required|unique:user,user',
'pwd'=>'required|same:repwd',
'code'=>'required|captcha',
];
//返回提示信息
$message = [
'email.required'=>'邮箱不能为空',
'email.unique'=>'邮箱已注册,请登录',
'email'=>'邮箱格式不正确',
'user.required'=>'用户名不能为空',
'user.unique'=>'用户名已存在,请重试',
'pwd.required'=>'密码不能为空',
'pwd.same'=>'两次密码输入不一致',
'code.required'=>'验证码不能为空',
'code.captcha'=>'验证码输入错误'
];
$validator = \Validator::make($values,$rules,$message);
if ($validator->passes()){
$user = $request->input('user');
$email = $request->input('email');
$result = DB::table('user')->where([['user','=',$user],['email','=',$email]])->first();
if ($result){
$data = [
'status'=>'4',
'massage'=>'用户已经注册,请重试'
];
return $data;
}else{
unset($_POST['repwd']);
unset($_POST['code']);
$_POST['create_time'] = time();
$_POST['pwd'] = md5(md5($_POST['pwd']));
$_POST['token'] = str_random(50);
$_POST['status'] = 1;
$result = DB::table('user')->insertGetID($_POST);
if ($result){
//发送邮件到注册时的邮箱
Mail::send('mail.index',['id'=>$result,'token'=>$_POST['token']],function($message){
$message->to($_POST['email']);
$message->subject('亲爱的用户,恭喜您注册成功');
});
//返回邮箱地址,跳转立即激活页面
$mail_arr = explode('@',$_POST['email']);
$href = "mail.".$mail_arr[1];
$data = [
'status'=>'200',
'href'=>$href,
'info'=>'注册成功'
];
return $data;
}else{
$data = [
'status'=>'403',
'info'=>'注册失败'
];
return $data;
}
}
}else{
return response()->json([
'status'=>'1',
'info'=>$validator->errors()->first()
]);
}
}
}
3,注册的视图
a,视图中利用layui弹出层给用户提示;
b,视图文件我就把重要的贴出来了,其他的都是注册的form表单的信息。
c,js部分需要注意的是,laravel本身是有CSRF验证的,默认是开启的,由于注册时post请求,就要进行CSRF验证,当然,也可以在laravel中关闭CSRF。小编这里把处理CSRF验证写在最下方。
<div id="signup-box" class="signup-box widget-box no-border">
<div class="widget-body">
<div class="widget-main">
<h4 class="header green lighter bigger">
<i class="ace-icon fa fa-users blue"></i>
用户注册
</h4>
<div class="space-6"></div>
<p>填写信息: </p>
<form id="regForm">
<fieldset>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<input name="email" type="email" class="form-control" placeholder="邮箱" />
<i class="ace-icon fa fa-envelope"></i>
</span>
</label>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<input name="user" type="text" class="form-control" placeholder="用户名" />
<i class="ace-icon fa fa-user"></i>
</span>
</label>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<input name="pwd" type="password" class="form-control" placeholder="密码" />
<i class="ace-icon fa fa-lock"></i>
</span>
</label>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<input name="repwd" type="password" class="form-control" placeholder="确认密码" />
<i class="ace-icon fa fa-retweet"></i>
</span>
</label>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<input type="text" class="form-control" name="code" placeholder="输入验证码" />
<label style="margin-top:30px;">验证码</label>
<img id="codeReg" style="margin-top:10px;float: right" src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
</span>
</label>
<label class="block">
<input type="checkbox" class="ace" />
<span class="lbl">
接受
<a href="#">用户协议</a>
</span>
</label>
<div class="space-24"></div>
<div class="clearfix">
<button type="reset" class="width-30 pull-left btn btn-sm">
<i class="ace-icon fa fa-refresh"></i>
<span class="bigger-110">重置</span>
</button>
<button id="register" type="button" class="width-65 pull-right btn btn-sm btn-success">
<span class="bigger-110">注册</span>
<i class="ace-icon fa fa-arrow-right icon-on-right"></i>
</button>
</div>
js部分
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
//注册
$("#register").click(function(){
$("#codeReg").attr('src',src='/captcha/flat?'+Math.random());
$.ajax({
type:'post',
url:'/admins/register',
dataType:'json',
data:$("#regForm").serialize(),
success:function(data){
if (data.status=='1'){
layer.msg(data.info,{icon:5,time:1000});
}else if(data.status=='403'){
layer.msg(data.info,{icon:5,time:1000});
}else{
/*layer.confirm('是否立即激活?', {
btn: ['确认','取消'] //按钮
}, function(){
window.location.href="http://www.jb51.net";
});*/
/* layer.open({
type: 1,
area: ['300px', '360px'],
shadeClose: true, //点击遮罩关闭
content: "<a style='width:200px;height: 100px;' href=http://"+data.href+">立即激活</a>"
});*/
alert('立即激活');
window.location.href="http://"+data.href;
}
},
error:function(){
layer.msg("网络错误,稍后重试",{icon:5,time:1000});
window.location.reload();
}
})
});
ajax请求处理CSRF验证的办法
a,在head头中加meta标签,content写上CSRF
b,在ajax请求的时候使用ajaxSetup把CSRF传递到headers请求头里面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta id="farm_csrf" name="csrf-token" content="{{ csrf_token() }}">
<title>登录页面</title>
<meta name="description" content="User login page" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="/admin/assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="/admin/assets/font-awesome/4.2.0/css/font-awesome.min.css" />
</head>
//把CSRF的值写进headers里面
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
完成页面的效果