利用PHP的laravel框架开发一个博客后台的小记录(进度 55%)
本文最后更新于 142 天前,其中的信息可能已经有所发展或是发生改变。

前言:

五一长假马上就要到了,自己身在学校,而且身份证也弄不见了,所以也没有旅游什么的,想想五一假期总该做点什么吧,刚好最近又入门了laravel,于是利用这个小长假去感受一下laravel,于是就有了做博客后台这样的想法。。。。事不宜迟,赶紧开始吧

 

一:Git的使用

2021年5月1日 00:05:07,稍稍学了Git的使用,全在之前的文章了,这里就不多写了

 

二:domo的下载

本着说用最经典的X-admin的demo,但是想想不够酷炫,于是用自己下的一个模板,但是对于jQuery,layui的不熟悉,BUG一个接一个,我都害怕出BUG了。。。想哭,看来前端是时候该进步进步了

 

三:更新日志

1.登录(5.1日)

前台的表单验证:前台的表单验证主要包括:

 

后台的表单验证:通过路由跳转

<?php
//后台登录路由
Route::get('login','LoginController@login');
//处理后台登录的路由
Route::post('dologin','LoginController@doLogin');
//加密路由
Route::get('jiami','LoginController@jiami');
在控制器文件夹创建一个新的控制器为LoginControler

<?php
namespace App\Http\Controllers\Admin;

use App\Model\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use think\response\Redirect;

class LoginController extends Controller
{
//后台登录页面
public function login()
{
     return view('admin.login');
}
 //处理用户登录到方法
public function doLogin(Request $request)
{
  //1接受表单提交的数据
   $input =$request->except('_token');

   #进行表单验证
   // 在手册的表达验证中找到 手动创建验证器
   // $validator = Validator::make('需要验证的表单数据','验证规则','错误提示信息');
   $rule = [
            'username'=>'required|between:4,18', //required为必须有输入,between是在几个数字之间,这是手册里自带的规则
              'password'=>'required|between:4,18|alpha_dash',

          ];
      //由于回显是英文,我们需要中文提示
      $msg = [
           'username.required'=>"用户名必须输入",
           'username.between'=>"用户名必须在4-18位之间",
           'password.required'=>"密码不能为空",
           'password.between'=>"密码必须在4-18位之间",
           'password.alpha_dash'=>"密码必须是数字字母或者下划线",
            ];
      $validator = Validator::make($input,$rule,$msg);

         if ($validator->fails()) {
            return redirect('admin/login')
            ->withErrors($validator)
            ->withInput();
          }
// 传给 make 方法的第一个参数是需要验证的数据。第二个参数则是该数据的验证规则。
//
//如果验证失败,则可以使用 withErrors 方法把错误消息闪存到 Session 。使用这个方法进行重定向后, $errors 变量会自动和视图共享,你可以把这些消息显示给用户。
// withErrors 方法接收验证器、MessageBag 或 PHP Array

         #3表单验证通过后做数据处理,是否存在用户以及密码
         $user = User::where('user_name',$input['username'])->first();
       // 要查看特定字段的第一个错误消息,可以使用 first 方法
        if(!$user){
             return redirect('admin/login')->with('error','用户名输入错误');
        }
        if ($input['password']!=Crypt::decrypt($user->user_pass)){
             return redirect('admin/login')->with('error','密码输入错误');

}
       // 4.用户信息存到seesion中
        session()->put('user',$user);
       // 5.跳转到后台首页
           return redirect('admin/index');
}
public function jiami()
{
// 常用的加密方法
// 1.md5加密,生成一个32位的字符串
// $str ='salt'.'123456';
// 其中salt是自己定义的一个加密的算法,保证安全
// return md5($str);
//// 2.hash加密
// $str = '123456';
// $hash = Hash::make($str);
// //解密方法
// if(Hash::check($str,$hash)){
// return '密码正确';
// }else{
// return '密码错误';
// }
// 3.crypt加密
$str = '123456';
$crypt_str =Crypt::encrypt($str);

5.8日:因为在存session的时候 。不小心把$user加双引号了,导致后面读取seesion值的时候一直为空,以至于查不出哪里出错了,所以对于小错误一定要小心

创建用户User模块
 <?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
   //这是用户模型
   // 1.关联的数据表
public $table = 'blog_user';
   //2主键
   public $primaryKey ='user_id';
   //3.可以操作的字段
    public $fillable =[
      'user_name','user_pass','email','phone'
    ];
// 4.不允许操作的字段
    public $guarded = [];
// 5.是否维护create_at 和updated_at字段
     public $timestamps = false;


}

至此,登录的系统的完成了

 

2.注册(5.2)

对于注册功能,我们建立一个资源路由


Route::resource('user','UserController');  //资源路由 用php artisan route:list 查看相关的admin/user的操作
Route::post('user/{id}','UserController@updates'); //因为有些路由的url确实。。令人无语,于是自己又做一个
Route::get('user/del/{id}','UserController@destroys');

 

下面是资源路由对应的控制器的方法

 <?php

namespace App\Http\Controllers\Admin;

use App\Model\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Crypt;
class UserController extends Controller
{
  /**
  * Display a listing of the resource.
   *
   * @return \Illuminate\Http\Response
   */
   //创建控制器自带的几种方法
    //第一个 获取用户列表
public function index(Request $request)
{
  //
   //查询
  // $input = $request->all();
  // dd($input);
     User::orderBy('user_id','asc')
         ->where(function ($query) use($request){
      $username =$request->input('username');
      if (!empty($username)){
         $query->where('user_name','like','%'.$username.'%');
      }
  })
      ->paginate($request->input('num')?$request->input('num'):3);
    $user =User::paginate(3); //这里不用get用这个可以实现分页
        return view('admin.user.list',compact('user','request'));
}

/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/

//返回用户添加页面
public function create()
{
   //
   return view('admin.user.add');
}

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/


 //执行添加操作
public function store(Request $request)
{

    // 1.接受前台表单提交的数据
       $input =$request->all();

     //2.进行表单验证 未进行
     //3.添加数据到数据库的user表
        $username = $input['email'];
        $pass = Crypt::encrypt($input['password']);
        $res = User::create(['user_name'=>$username,'user_pass'=>$pass,'email'=>$input['email']]);
            if($res){
                      $data = [
                               'status'=>0,
                               'message' => '添加成功',
                                                       ];
                     }else{
                              $data = [
                                       'status'=>1,
                                       'message' => '添加失败',
                                                               ];

                     }
         json_encode($data);
                    return $data;
        // 获取客户端提交的表单数据


}

 /**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/

//显示数据
public function show($id)
{
    //
}

/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/


 //返回一个修改页面
public function edit(Request $request,$id)
{
    $user = User::find($id);
        return view('admin.user.edit',compact('user'));
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/

 //执行修改操作
public function updates(Request $request, $id)
{
    // 1.根据id获取要修改的记录
      $user = User::find($id);
      //2.获取要修改的用户名
      $username =$request->input('username');
      $user->user_name =$username;
      $res = $user->save();
      if ($res){
                $data = [
                          'status'=>0,
                          'message'=>"修改成功"
                                               ];
      }else{
             $data = [
              'status'=>1,
              'message'=>"修改失败"];
                                    }
        return $data;
}

 /**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
     //执行删除操作
public function destroys($id)
{
      $user = User::find($id);
      $res = $user->delete();
        if($res){
            $data = [
                     'status'=>0,
                     'message'=>"删除成功"
                                          ];
        }else{
                  $data = [
                          'status'=>1,
                          'message'=>"删除失败"
                                              ];
        }
                 return $data;
                 dump(1);
               }
}

 

通过用户路由可以对用户进行各种添加删除操作

 

 

3.前端页面处理(5.3):

主要是将前端的后台页面分为三个文件,一个为左侧的功能栏(aside),和html头部(header),尾部(footer),将css,JavaScript的代码分离,以方便管理

 

4.角色模型处理(5.4)

RBAC权限原理

RBAC  是基于角色的访问控制(Role-Based Access Control )在 RBAC  中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

 

RBAC  认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作,也就是“主体”对“客体”的操作。

Who:是权限的拥有者或主体(如:User,Role)。

What:是操作或对象(operation,object)。

How:具体的权限(Privilege,正向授权与负向授权)。

然后 RBAC  又分为RBAC0、RBAC1、RBAC2、RBAC3

  • RBAC0:是RBAC的核心思想。
  • RBAC1:是把RBAC的角色分层模型。
  • RBAC2:增加了RBAC的约束模型。
  • RBAC3:其实是RBAC2 + RBAC1。

那么开始创建相关角色权限数据库吧

 

那么开始创建Role模块

我好想省略怎么办。。。。。。

创建Role模型 关联数据库

 

创建Permission模型,关联相关数据库

 

 

创建RoleController控制器

<?php

namespace App\Http\Controllers\Admin;

use App\Model\Permission;
use App\Model\Role;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class RoleController extends Controller
{
public function index()
{
//1.获取所有的角色列表
$role = Role::get();
    return view('admin.role.list',compact('role'));
}
//返回添加页
public function create()
{
    return view('admin.role.add');
}
public function store(Request $request)
{
//1.获取数据
   $input =$request->except('_token');
   //2.进行表单验证
   //3.将数据添加到数据库
     $res = Role::create($input);
      if($res){
           return redirect('admin/role');
      }else{
           return back()->with('msg','添加失败');
     }
}

//获取授权页面
public function auth($id)
{
   //获取当前角色
    $role =Role::find($id);
    //获取所有权限列表
    $perms =Permission::get();
   //当前角色拥有的权限
    $owm_perms = $role->permission;
   // dd($owm_perms);
     //角色拥有的权限的ID
   $owm_pers = [];
    foreach ($owm_pers as $v){
       $owm_pers[] = $v->id;
      }
       return view('admin.role.auth',compact('role','perms','owm_pers'));
}




	

评论

  1. 田一男
    Windows Chrome
    9月前
    2021-5-08 18:15:01

    哇哦,真不错( ni shi bu shi zhi jie jie de tu fang shang qu de ?)富强 民主 文明 和谐

  2. xiaoyu 博主
    Windows Chrome
    9月前
    2021-5-08 19:49:15

    你这拼音我拼不出来

  3. 思思
    Android Chrome
    7月前
    2021-6-21 22:43:15

    你是不是直接截的图发上去的(翻译)

    • xiaoyu 博主
      Windows Chrome
      7月前
      2021-6-21 23:47:27

      我自己写的

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇