• laravel 7 在线教育项目实操笔记(2)后台基础功能开发


    基础功能:后台登录、退出、后台首页页面的展示
    1、创建管理员数据表
    数据字典:在以后开发项目的时候经常的去用到。数据字典就是通过表格化的形式展示了数据表中应该有的字段信息。

    表名:manager

    1、创建迁移文件
    php artisan make:migration create_manager_table
    2、编写迁移文件的代码,文件位置:database/migrations/
    public function up()
        {
            Schema::create('manager', function (Blueprint $table) {
                $table->increments('id');  //主键
                $table->string('username',20)->notNULL(); //用户名
                $table->string('password')->notNULL(); //密码
                $table->enum('gender',[1,2,3])->notNULL()->default('1'); //性别 1男 2女 3保密
                $table->string('mobile',11); //手机
                $table->string('email',50); //邮箱
                $table->tinyInteger('role_id'); //角色
                $table->timestamps(); //时间
                $table->rememberToken(); //记住登录
                $table->enum('status',[1,2])->notNULL()->default('2'); //账号状态
    
            });
        }
        public function down()
        {
    //删表方法 Schema::dropIfExists('manager'); }

    3、执行迁移文件

    php artisan migrate:install                         //首次使用迁移先生成迁移记录表

    php artisan migrate

    4、快速填充数据  

    插件 faker

    创建填充器文件 php artisan make:seeder ManagerTableSeeder

    编写填充器的代码文件 使用方法参考:https://packagist.org/packages/fzaninotto/faker

    提示:在laravel中系统提供了一个用户密码加密的函数:bcrypt,语法:bcrypt(密码文明)

    database\seeds\ManagerTableSeeder.php

    <?php
    
    use Illuminate\Database\Seeder;
    
    class ManagerTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            $faker = Faker\Factory::create("zh_CN");
            for($i=0;$i<100;$i++) {
                $data[] = [
                    'username' => $faker->username,
                    'password' => bcrypt("123456"),
                    'gender' => mt_rand(1, 3),
                    'mobile' => $faker->phoneNumber,
                    'email' => $faker -> email,
                    'role_id' => mt_rand(1, 6),
                    'created_at' => date('y-m-d H:i:s', time()),
                    'status' => mt_rand(1, 2)
                ];
            }
             DB::table('manager')->insert($data);
        }
    }
    

     执行填充器文件 php artisan db:seed --class=ManagerTableSeeder

    5、后台登录页面的展示

    确定路由 /admin/public/login

    到routes/web.php中添加路由

    Route::group(['prefix'=>'admin'],function () {
        Route::get('public/login',  'Admin\PublicController@login');
    });

    6、创建控制器文件

    php artisan make:controller Admin\PublicController

    7、创建需要的login方法 在app\Http\Controllers\Admin\PublicController.php中添加

    public function login(){
           return view('admin.public.login');
    
    
        }
    

    8、创建需要的视图文件 以h-ui admin模板演示 http://www.h-ui.net/H-ui.admin.shtml

    将login.html文件复制到 /resources/views/admin/public/下 如无admin/public文件夹  自己手动创建

    改login.html名为login.blade.php 将页面中使用的js css文件地址替换为项目中实际的文件地址

    9、登录页面验证码添加

     验证码的下载地址:https://packagist.org/packages/mews/captcha  安装命令:composer require mews/captcha

    10、配置config/app.php文件中的providers和aliases数组

    providers中加 Mews\Captcha\CaptchaServiceProvider::class,

    aliases中加 'Captcha' => 'Mews\Captcha\Facades\Captcha',

    11、修改模板验证码图片url地址为 {{Captcha::src('edu')}}

    edu为自己配置 配置地址 vendor\mews\captcha\config\config.php

    'edu' => [
            'length' => 4,
            'width' => 120,
            'height' => 36,
            'quality' => 90,
            'math' => false,
        ],

    修改验证码错误信息为中文:打开 resources/zh-CN/validation.php

    在总数组中追加如下键值对: 'captcha' => ':attribute 不正确。',

      在 attributes 数组中追加如下键值对:

    'captcha'               => '验证码',

     12、管理员登录的自动验证 提交的路由地址路由:/admin/public/check                post

    将模板文件中接收用户名 密码的 url修改为 /admin/public/check

    13、添加csrf验证的隐藏域 添加位置 :from表单内的任何位置  如 {{csrf_field()}}</from>

    14 记住登录功能 给“使我保持登录状态”复选框添加一个默认值如 value=1

    <input type="checkbox" name="online" id="online" value="1">
                使我保持登录状态</label>
    

     15 编写check方法

    语法:$this -> validate($request,[规则数组]);

    public function check(Request $request){
            $this->validate($request,[
                'username' =>'required|min:2|max:20',  //最小2 最大20位
                'password' =>'required|min:6',  //最小6位
                'captcha'  =>'required|size:4|captcha', //验证码长度
    
            ]);
    

     16 在登录模板页面上显示自动验证没有通过的时候的错误信息

    <SCRIPT type="text/javascript">
        @if (count($errors) > 0)
    
            var allError="";
            @foreach ($errors->all() as $error)
                allError +="{{$error}}<br>";
    
            @endforeach
    layer.alert(allError,{title:'错误提示'});
        layer.msg(allError, {
            time: 20000, //20s后自动关闭
            btn: ['确定']
        });
    
        @endif
    
    </SCRIPT>  //使用layerjs插件  记得引入layer
    

     17、管理员身份验证

    语法:Auth::guard(指定guard实例) -> attempt(需要验证的用户信息关联数组,[bool值]);

    因需要auth门面 所以在PublicController.php中引入

    use Auth;
    

     18、在/config/auth.php中添加guard实例

     仿照官方原有的实例 guards数组中添加

     'admin' => [
                'driver' => 'session',
                'provider' => 'admin',
            ],
    

     providers数组中添加

    'admin' => [
                'driver' => 'eloquent',
                'model' => App\Admin\Manager::class,
            ],
    

     // 'model' => App\Admin\Manager::class 为创建实例所用到的模型 稍后添加

    19、创建需要使用的模型(guard需要使用)

    php artisan make:model Admin/Manager

    20、定义模型的基本属性:app\Admin\Manager.php文件中  添加

    protected  $table = 'manager';  //定义当前模型需要关联的mysql表

    引入

    use Illuminate\Foundation\Auth\User as Authenticatable;
    然后修改 继承class Manager extends Authenticatable

    21、继续身份验证 PublicController.php文件

    添加     $data= $request -> only(['username','password']);
            $data['status'] = '2';
            $result=Auth::guard('admin')->attempt($data,$request->get('online'));

    22、manager.php

    完整代码:

    
    
    <?php
    
    namespace App\Admin;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Foundation\Auth\User as AuthManager;
    
    class Manager extends AuthManager
    {
        protected $table='manager';
         
    }
    
    
    

     23、根据错误信息判断跳转方向:

    语法:return redirect(路由) -> withErrors([错误信息的数组]);

    if($result){
                return redirect("/admin/index/index");
            }
            else{
                return redirect("/admin/public/login")->withErrors(['loginerror'=>'用户名密码错误']);
            }
    

     完整代码:

    <?php
    
    namespace App\Http\Controllers\Admin;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Auth;
    
    class PublicController extends Controller
    {
        //登录页面的展示
        public function login(){
           return view('admin.public.login');
    
    
        }
        public function check(Request $request){
            $this->validate($request,[
                'username' =>'required|min:2|max:20',
                'password' =>'required|min:6',
                'captcha'  =>'required|size:4|captcha',
    
            ]);
    
            //继续开始进行身份核实
            $data= $request -> only(['username','password']);
            $data['status'] = '2';
            $result=Auth::guard('admin')->attempt($data,$request->get('online'));
            if($result){
                return redirect("/admin/index/index");
            }
            else{
                return redirect("/admin/public/login")->withErrors(['loginerror'=>'用户名密码错误']);
            }
        }
        //logout为添加的退出登录方法
        public function logout(){
            Auth::guard('admin')->logout();
            return redirect("/admin/public/login");
    
    
        }
    }
    //记得在web.php中添加 logout规则 Route::get('public/logout', 'Admin\PublicController@logout');

     后台首页的展示

    定义后台首页的路由约定:/admin/index/index  /admin/index/welcome

    24、添加路由 web.php中
    Route::get('index/welcome','Admin\IndexController@welcome');
    Route::get('manager/index','Admin\Managercontroller@index');

      25、 创建需要的控制器文件

     php artisan make:controller Admin/IndexController

    26、编写index方法、welcome方法,展示各自的视图

    public function index(){
            return view('admin.index.index');
    
    
        }
        public  function welcome(){
            return view('admin.index.welcome');
    
        }
    

     27、创建需要的两个视图文件(index.blade.php和welcome.blade.php)

    复制h-ui admin模板文件夹中的 index.html welcome.html文件到resources\views\admin\index\下 并改名为 index.blade.php welcome.blade.php

    如无文件夹 手动创建

    记得修改模板所需的js css路径

    28、获取已经登录的用户名

    {{Auth::guard('admin')->user()->username}}
    

    29、路由保护 语法:-> middleware(中间件名称)

    在web.php中需要保护的路由 如

     Route::get('index/welcome','Admin\IndexController@welcome')->middleware('auth:admin');
     Route::get('manager/index','Admin\Managercontroller@index')->middleware('auth:admin');
    

     也可以分组如

    Route::group(['prefix'=>'admin'],function () {
        Route::get('public/login',  'Admin\PublicController@login')->name('login');
        Route::post('public/check', 'Admin\PublicController@check');
        Route::get('public/logout', 'Admin\PublicController@logout');
    });
    Route::group(['prefix'=>'admin','middleware'=>'auth:admin'],function () {
        Route::get('index/index','Admin\IndexController@index');
        Route::get('index/welcome','Admin\IndexController@welcome');
        Route::get('manager/index','Admin\Managercontroller@index');
    });
    

     注意:a. 需要判断是否登录页面全部都加上中间件的保护;

    b. 在跳转的时候,系统默认使用login路由别名,如果没有则报“路由找不到”的错误,因此需要给登录路由添加“login”别名;

  • 相关阅读:
    LeetCode 120:三角形最小路径和
    守护进程
    G711时间戳增量和数据包大小的关系
    H264防止竞争机制
    硬编码帧率错误导致的浏览器不能播放的问题
    GCC inline
    单例模式的双检锁的隐患和优化
    Java中异常捕获子类异常捕获在父类异常前面,即小范围先被捕获
    线程运行流程图
    将二维数组转为稀疏数组
  • 原文地址:https://www.cnblogs.com/linzenews/p/12560470.html
Copyright © 2020-2023  润新知