laravel 5.5登录注册重构

高尔基曾说过:我扑在书籍上,像饥饿的人扑在面包上一样。虽然我没有到达那个地步,但是我还是会向蜗牛一样向着阳光慢慢挪动,满怀希望!


最近通过学习laravel找到了一些学习方法,可以说是自己的正能量,就是每天晚上下班之后,回到宿舍(宿舍之所以称之为宿舍,因为它再好也不如家里好^_^),看看新知识。然后第二天去公司,敲一敲,练一练。艾老师(艾宾浩斯)说过,人过了八到九个小时之后,记忆的知识大概只有开始记忆的时候的35%,但是我觉得应该是50%,为什么这么说呢,因为我学的是新知识,之前没有了解过的,并带着100%的希冀在学习,所以记起来也会深刻一些。切记,每天晚上不要学习太多知识,不然脑子会瓦特掉的,我每天也就学习一个小时,看一下视频(因为本人不怎么喜欢看书,但是最近也在看关于Python的书籍,形式所逼啊!),然后将视频的中的知识截图发到QQ上,第二天在公司想不起来的时候看一下,效果还行,还有就是第二天想不起来的知识,我会在便签中记录,然后下午下班之前在看下(最近总想着开发管理自己知识短板的网站),这样自己也会很有成就感,对成就感,可以每天把学到的东西,写篇博客,坚持更博(不太容易),这样也会提升你对知识的渴望,俗话说得好,一个习惯的养成需要90天,我相信每天的努力,早晚有一天,你会变成你当初梦想的样子!废话说的有点多了,继续我今天的主题:laravel的登录注册重构!Fighting!


路由

//注册页面
Route::get('/register', '\App\Http\Controllers\RegisterController@index');
//注册行为
Route::post('/register', '\App\Http\Controllers\RegisterController@register');
//登录页面
Route::get('/login', '\App\Http\Controllers\LoginController@index');
//登录行为
Route::post('/login', '\App\Http\Controllers\LoginController@login');
//登出行为
Route::get('/logout', '\App\Http\Controllers\LoginController@logout');

使用 artisan 创建控制器

php artisan make:controller RegisterController  //用户注册控制器
php artisan make:controller LoginController     //用户登录控制器

渲染用户注册页面

class RegisterController extends Controller
{
    public function index()
    {
        //渲染注册页面
        return view('user.regist');
    }
}

创建 user/regist.blade.php 模板(基于boostrap的注册页面,有需要的可以带走)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>注册</title>

    <!-- Bootstrap core CSS -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">


    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

<div class="container">

    <form class="form-signin" method="POST" action="/register">
        {{ csrf_field() }}
        <h2 class="form-signin-heading">请注册</h2>
        <label for="name" class="sr-only">名字</label>
        <input type="text" name="name" id="name" class="form-control" placeholder="名字" required autofocus>
        <label for="inputEmail" class="sr-only">邮箱</label>
        <input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱" required autofocus>
        <label for="inputPassword" class="sr-only">密码</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="输入密码" required>
        <label class="sr-only">重复密码</label>
        <input type="password" name="password_confirmation" class="form-control" placeholder="重复输入密码" required>

        <button class="btn btn-lg btn-primary btn-block" type="submit">注册</button>
    </form>

</div>

</body>
</html>

渲染用户登录页面

class LoginController extends Controller
{
    public function index()
    {
        //渲染注册页面
        return view('user.login');
    }
}

创建 user/login.blade.php 模板

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>登陆</title>

    <!-- Bootstrap core CSS -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">


    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

<div class="container">

    <form class="form-signin" method="POST" action="/login">
        {{ csrf_field() }}
        @include('layout.errors')
        <h2 class="form-signin-heading">请登录</h2>
        <label for="inputEmail" class="sr-only">邮箱</label>
        <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
        <label for="inputPassword" class="sr-only">密码</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <div class="checkbox">
            <label>
                <input type="checkbox" value="1" name="is_remember"> 记住我
            </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">登陆</button>
        <a href="/register" class="btn btn-lg btn-primary btn-block" type="submit">去注册>></a>
    </form>

</div> <!-- /container -->

</body>
</html>

渲染效果图

注册页面

这里写图片描述

登录页面

这里写图片描述

下面开始我们的注册行为

这里写图片描述

路由地址虽然一样,但是提交方式不一样所以路由不冲突

在注册的控制器中定义注册的处理方法
public function register()
{
    //验证

    //逻辑

    //渲染
}
表单提交三步骤
  • 验证
  • 逻辑
  • 渲染

首先在表单中加上{{ csrf_field() }}

这里写图片描述

写注册表单验证逻辑
public function register()
{
    //验证
    $this->validate(\request(),[
        //unique(验证user表中是否存在用户的名字)
        'name' => 'required|min:3|max:10|unique:user,name',
        //email属性就是验证是否符合email规则
        'email' => 'required|unique:user,email|email',
        //confirmed就是验证密码和确认密码保持一致
        'password' => 'required|min:8|max:16|confirmed'
    ]);

    //逻辑
    $name = \request('name');
    $email = \request('email');
    $password = bcrypt(\request('password'));
    //这里User(当然要在上面先引入)
    User::create(compact(['name', 'email', 'password']));

    //渲染(注册成功跳转至登录页面)
    return view('user.login');
}

如果登录成功,跳转至登录页面,失败,则展示失败信息,所以我们还需要在表单中定义失败模板,因为不定义的话,页面不会展示错误信息,失败之后只会刷新当前页面,容易让人费解!

因为很多页面要用到,所以我们不如定义一个错误信息的模板 errors.blade.php
<div class="errors">
    @if (count($errors) > 0)
        <div class="box-body">
            <div class="alert alert-danger alert-dismissible">
                <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                <h4><i class="icon fa fa-ban"></i>错误:</h4>
                @foreach($errors->all() as $error)
                    {{$error}}
                @endforeach
            </div>
        </div>
    @endif
</div>
然后在注册摸板中引用 @include('layout.errors')
<form class="form-signin" method="POST" action="/register">
        {{ csrf_field() }}
        <h2 class="form-signin-heading">请注册</h2>
        <label for="name" class="sr-only">名字</label>
        <input type="text" name="name" id="name" class="form-control" placeholder="名字" required autofocus>
        <label for="inputEmail" class="sr-only">邮箱</label>
        <input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱" required autofocus>
        <label for="inputPassword" class="sr-only">密码</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="输入密码" required>
        <label class="sr-only">重复密码</label>
        <input type="password" name="password_confirmation" class="form-control" placeholder="重复输入密码" required>
        @include('layout.errors')
        <button class="btn btn-lg btn-primary btn-block" type="submit">注册</button>
    </form>

这样一个注册功能就写好了!

用户登录

//登录页面
Route::get('/login', '\App\Http\Controllers\LoginController@index');
//登录行为
Route::post('/login', '\App\Http\Controllers\LoginController@login');
//登出行为
Route::get('/logout', '\App\Http\Controllers\LoginController@logout');
登录逻辑 登录成功跳转至文章列表,失败则返回刚才的页面
public function login()
{
    //验证
    $this->validate(request(),[
        'email' => 'required|email',
        'password' => 'required',
        //是否记住密码 
        'is_remember' => 'integer'
    ]);

    //逻辑
    $user = \request(['email', 'password']);
    $is_remember = \request('is_remember');
    if (\Auth::attempt($user, $is_remember)) {
        return redirect('/posts');
    }

    //渲染
    return \Redirect::back->withErrors('邮箱或密码不正确');
}
登出行为
public function logout()
{
    //退出登录,并跳转至登录页面
    Auth::logout();
    return view('user.login');
}

重构就这样写好了,借助Auth轻松实现laravel的重构~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值