示例详解Laravel的注册重构
《:示例详解Laravel的注册重构》要点: 1. 首先确定用户注册的路由PHP编程 我们在安装好laravel的时候默认生成的注册是用邮箱进行注册的,并且有些选项不需要,有些还需要加一些表单选项 我们注册的话,并不是可以随便注册的,只有一些超级管理员才能进行注册 首先我们使用上次创建的 然后创建两条路由 前者是显示一个注册的页面 2. 显示注册账号页面PHP编程 这个使用的是 public function getRegister() { return view('auth.register'); } 3. 请求注册账号PHP编程 这个使用的是 注册账号的话和重置密码一样,而且比注册账号还要简单点. 我们在往数据库里插入一条用户纪录的时候,可以使用
public function postRegister(Request $request) { $rules = [ 'username'=>'required|unique:finance_enewsuser','password' => 'required|between:6,20|confirmed' ]; $messages = [ 'required'=>':attribute不能为空','unique'=>'用户名已被注册','between' => '密码必须是6~20位之间','confirmed' => '新密码和确认密码不匹配' ]; $username = $request->input('username'); $password = $request->input('password'); $group = $request->input('group'); $data = $request->all(); $validator = Validator::make($data,$rules,$messages); if ($validator->fails()) { return back()->withErrors($validator); } $data = [ 'username' => $username,'password' => bcrypt($password),'groupid' => $group,'checked' => 0,'styleid' => 1,'filelevel' => 0,'loginnum' => 0,'lasttime' => time(),'lastip' => '127.0.0.1','truename' => '','email' => '','pretime' => time(),'preip' => '127.0.0.1',]; User::create($data); //插入一条新纪录,并返回保存后的模型实例 //如果注册后还想立即登录的话,可以使用$user = User::create($data); Auth::login($user); 进行认证 return redirect('/'); } 4. 完成后的示例PHP编程 UserControllerPHP编程 public function getRegister() { return view('auth.register'); } public function postRegister(Request $request) { $rules = [ 'username'=>'required|unique:finance_enewsuser',$messages); if ($validator->fails()) { return back()->withErrors($validator); } $data = [ 'username' => $username,并返回保存后的模型实例 return redirect('/'); } register.bladePHP编程 <form class="login-form" action="" method="post"> {!! csrf_field() !!} <h3 class="font-green">Sign Up</h3> @if(count($errors) > 0) <div class="alert alert-danger display-hide" style="display: block;"> <button class="close" data-close="alert"></button> <span> </span> </div> @endif <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">用户名</label> <input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"> </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">密码</label> <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="Password" name="password"> </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">重复密码</label> <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Repeat password" name="password_confirmation"> </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">用户组</label> <select name="group" class="form-control"> <option value="1"> 超级管理员 </option> <option value="2"> 管理员 </option> <option value="3"> 编辑 </option> </select> </div> <div class="form-actions"> <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">注册</button> </div> </form> 5. 中间件C用户必须登录PHP编程 现在注册都完成了,我们就差用户的判断了. 需求注册账号必须只能是有超级管理员权限的账号才可以注册. 这种情况下按照我们一般的步骤就是在postRegister方法里直接查出用户的信息,然后查看用户是否满足这个权限,不满足的情况下就跳转到其它页面. 这种方法可以,但是,我们既然有超级管理员和管理员这些权限区分,肯定不止一个地方使用,其它地方也会用到. 然后会有人想到在 这个方法也可以,不过,我们推荐使用laravel提供的中间件这个功能,这个功能非常强大,也非常好用.现在我们就使用中间件这个功能. 因为我们是后台内容管理系统,所以,我们首先创建一个中间件,功能是,所有页面进入前,必须是登录状态,否则跳到登录页. 查看手册发现可以使用 然后会在 <?php namespace AppHttpMiddleware; use Closure; use Auth; class CheckLoginMiddleware { public function handle($request,Closure $next) { //使用Auth方法,需要引入use Auth;方法 //$request->is('login')表示请求的URL是否是登录页 //因为我们打算使用全局的,需要把登录页排除,不然会无限重定向 //如果你的登录页不是/login,而是/auth/login的话,就写$request->is('auth/login') //并且我们要在请求处理后执行其任务,因为我们需要获取到用户的登录信息 $response = $next($request); if (!Auth::check() && !$request->is('login')) { return redirect('/login'); } return $response; } } 这个中间件的功能是,如果有路由产生,首先使用 方法写好了,但是还不能使用,我们需要注册下这个中间件,告诉框架我们这个中间件写好了,可以使用了,使用的范围是哪里. 在 而 全局使用的意思是,不管你请求哪个页面,都会先执行这个中间件. 选择使用表示,需要哪个HTTP请求,要求执行中间件,就在哪个地方执行. 这里每个页面都要求必须登录的话,可定是注册一个全局的,在 AppHttpMiddlewareCheckLoginMiddleware::class 注册下,就可以使用了 >注意:请记住,如果定义全局的要格外小心,比如上面我们要排除登录页,不然因为用户没有登录,所以在哪个页面都会重定向到登录页,当然也包括登陆页PHP编程 6. 中间件C特殊页面需要验证用户组PHP编程 现在是进行用户权限页面的限制,同样我们也要重新创建一个中间件 使用 <?php namespace AppHttpMiddleware; use Closure; use Auth; class CheckGroupMiddleware { public function handle($request,Closure $next) { $user = Auth::user(); if ($user->groupid != 1) { return redirect('/'); } return $next($request); } } 这里我们还是通过 然后我们在到 这个中间件因为是可以选择的,所以我们还需要给它起个别名,在 'user.group' => AppHttpMiddlewareCheckGroupMiddleware::class 创建一个可以使用 创建好后,我们可以选择在哪里使用,一个是在 在router.php文件里使用PHP编程 Route::get('/',['middleware' => ['user.group'],function () { // }]); 在控制器内使用PHP编程 $this->middleware('user.group'); 这里我们选择在路由里添加中间件.让注册页面只能是超级管理员才可以注册PHP编程 Route::get('register','UserController@getRegister')->middleware('user.group'); Route::post('register','UserController@postRegister')->middleware('user.group'); 我们目前只有两个路由要判断权限,所以使用了链式的写法,当然你也可以按照手册里上使用组的方式,组的方式更为优雅.PHP编程 当然如果你的整个控制器内的方法都需要中间件进行验证过滤的话,你也可以创建组的形式,也可以直接在控制器内使用 class MyController extends Controller { public function __construct() { $this->middleware('user.group'); } public function index() { return view('my.index'); } } 总结 以上就是Laravel注册重构的全部内容,希望本文的内容对大家使用Laravel能有所帮助,如果有疑问欢迎大家留言讨论,小编会尽快给大家回复.PHP编程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |