thinkphp5项目--个人博客(四)
项目地址
fry404006308/personalBlog: personalBlog
https://github.com/fry404006308/personalBlog
一、表单数据显示---文件、图片、选择列表
就是把数据库的数据显示到如上的edit表单上面来
代码
1 <div class="form-group">
2 <label for="group_id" class="col-sm-2 control-label no-padding-right">缩略图</label>
3 <div class="col-sm-6">
4 <input id="pic" placeholder="" name="pic" style="display:inline;" type="file">
5 {if condition="$data['pic'] neq '' "}
6 <img src="__IMG__{$data.pic}" height="50px" alt="">
7 {else /}
8 <span>暂无缩略图</span>
9 {/if}
10 </div>
11 </div>
12
13
14 <div class="form-group">
15 <label for="group_id" class="col-sm-2 control-label no-padding-right">所属栏目</label>
16 <div class="col-sm-6">
17 <select class="form-control" name="cateid" required="" id="cateid">
18 <option value="">请选择栏目</option>
19 {volist name="cateres" id="value"}
20 <option {if condition="$value['id'] eq $data['cateid']"} selected="selected" {/if} value="{$value.id}">{$value.catename}</option>
21 {/volist}
22 </select>
23 </div>
24 <p class="help-block col-sm-4 red">* 必填</p>
25 </div>
26
27
28 <div class="form-group">
29 <label for="group_id" class="col-sm-2 control-label no-padding-right">是否推荐</label>
30 <div class="col-sm-6">
31 <label>
32 <input {if condition="$data['state'] eq 1"} checked="checked" {/if} class="checkbox-slider colored-darkorange" name="state" id="state" value="{$data.state}" type="checkbox">
33 <!-- checked="checked" -->
34 <span class="text"></span>
35 </label>
36 </div>
37 </div>
二、用户登录
模型做数据(数据库来的数据)处理,控制器做逻辑处理
模型
1 <?php
2 namespace app\admin\model;
3
4 use think\Model;
5 use think\Db;
6 class Login extends Model
7 {
8 //模型是处理数据的
9 public function login($data){
10 $user=DB::name('admin')->where('username','=',$data['username'])->find();
11 //如果用户存在我们就进行处理,否则不进行处理
12 if($user){
13 //密码正确和密码错误两种情况
14 if($user['password']==md5($data['password'])){
15 return 1;//信息正确
16 }else{
17 return 0;//密码错误
18 }
19
20 }else{
21 return -1;//用户不存在
22 }
23
24 }
25 }
控制器
1 <?php
2 namespace app\admin\controller;
3
4 use think\Controller;
5 use app\admin\model\Login as LoginModel;
6
7 class Login extends controller
8 {
9 public function index()
10 {
11 if(request()->isPost()){
12 $admin=new LoginModel();
13 $data=input('post.');
14 if($admin->login($data)==-1){
15 $this->error('用户不存在');
16 }elseif($admin->login($data)==0){
17 $this->error('用户密码错误');
18 }elseif($admin->login($data)==1){
19 $this->success('成功登陆','index/index');
20 }
21 }
22 return view('login');
23 }
24
25
26 }
三、session操作
在登录成功的模型(model/Login.php)中添加session
1 <?php
2 namespace app\admin\model;
3
4 use think\Model;
5 use think\Db;
6 use think\Session;
7 use think\Request;
8 class Login extends Model
9 {
10 //模型是处理数据的
11 public function login($data){
12 $user=DB::name('admin')->where('username','=',$data['username'])->find();
13 //如果用户存在我们就进行处理,否则不进行处理
14 if($user){
15 //密码正确和密码错误两种情况
16 if($user['password']==md5($data['password'])){
17 //写入session
18 Session::set('username',$user['username']);
19 Session::set('id',$user['id']);
20 return 1;//信息正确
21 }else{
22 return 0;//密码错误
23 }
24
25 }else{
26 return -1;//用户不存在
27 }
28
29 }
30 }
删除session,退出登录的时候删除session
1 public function logout(){
2 // 清除session(当前作用域)
3 session(null);
4 return $this->success('退出成功!!','login/index');
5 }
照着thinkphp的操作手册,session还是比较好弄的
thinkphp手册session参照位置
助手函数
系统也提供了助手函数session 完成相同的功能,例如:
// 初始化session
session([
'prefix' => 'module',
'type' => '',
'auto_start' => true,
]);
// 赋值(当前作用域)
session('name', 'thinkphp');
// 赋值think作用域
session('name', 'thinkphp', 'think');
// 判断(当前作用域)是否赋值
session('?name');
// 取值(当前作用域)
session('name');
// 取值think作用域
session('name', '', 'think');
// 删除(当前作用域)
session('name', null);
// 清除session(当前作用域)
session(null);
// 清除think作用域
session(null, 'think');
部分对应的视图,修改密码那部分和session没有关系
1 <!--Login Area Dropdown-->
2 <ul class="pull-right dropdown-menu dropdown-arrow dropdown-login-area">
3 <li class="username"><a>David Stevenson</a></li>
4 <li class="dropdown-footer">
5 <a href="{:url('admin/logout')}">
6 退出登录
7 </a>
8 </li>
9 <li class="dropdown-footer">
10 <a href="{:url('admin/edit',array('id'=>$Request.session.id))}">
11 修改密码
12 </a>
13 </li>
14 </ul>
15 <!--/Login Area Dropdown-->
四、验证码
截图
thinkphp手册参考
1 验证码显示
2 <div>{:captcha_img()}</div>
3 或者
4 <div><img src="{:captcha_src()}" alt="captcha" /></div>
1 验证码配置
2 然后在应用配置文件中添加验证码的配置参数
3 'captcha' => [
4 // 验证码字符集合
5 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
6 // 验证码字体大小(px)
7 'fontSize' => 25,
8 // 是否画混淆曲线
9 'useCurve' => true,
10 // 验证码图片高度
11 'imageH' => 30,
12 // 验证码图片宽度
13 'imageW' => 100,
14 // 验证码位数
15 'length' => 5,
16 // 验证成功后是否重置
17 'reset' => true
18 ],
19 并且确保开启了URL路由。
配置文件
1 //验证码配置
2 'captcha' => [
3 // 验证码字符集合
4 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
5 // 验证码字体大小(px)
6 'fontSize' => 20,
7 // 是否画混淆曲线
8 'useCurve' => true,
9 // 验证码图片高度
10 'imageH' => 40,
11 // 验证码图片宽度
12 'imageW' => 130,
13 // 验证码位数
14 'length' => 3,
15 // 验证成功后是否重置
16 'reset' => true
17 ],
视图
1 <div class="loginbox-textbox">
2 <input class="form-control" placeholder="CAPTCHA" name="code" style="width:90px; float:left; cursor:pointer;" type="text">
3 <img style="float:left;" src="{:captcha_src()}" alt="captcha" onclick="this.src='{:captcha_src()}?'+Math.random(); " />
4 </div>
模型
模型中不能写页面跳转,比如$this->error('验证码错误');
1 //验证验证码
2 $captcha = new \think\captcha\Captcha();
3 if (!$captcha->check($data['code'])) {
4 return 4;
5 }
控制器
1 $admin=new LoginModel();
2 $data=input('post.');
3 $num=$admin->login($data);
4 if($num==4){
5 $this->error('验证码错误');
6 }
五、权限验证
没有登录的用户必须登录了才能在网站上面进行操作
1 <?php
2 namespace app\admin\controller;
3
4 use think\Controller;
5 class Base extends Controller
6 { 7 //这个类里面的其它方法在执行之前必须先执行这个方法 8 public function _initialize(){ 9 if(!session('username')){ 10 return $this->error('请先登录系统!!','login/index'); 11 } 12 } 13 }
这个类里面的其它方法在执行之前必须先执行这个方法:function _initialize()
让其他的所有控制器都继承这个类就可以实现需要的功能了
1 use app\admin\controller\Base;
2
3 class Article extends Base
来源:oschina
链接:https://my.oschina.net/u/4386246/blog/4013321