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 appadminmodel; 3 4 use thinkModel; 5 use thinkDb; 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 appadmincontroller; 3 4 use thinkController; 5 use appadminmodelLogin 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 appadminmodel; 3 4 use thinkModel; 5 use thinkDb; 6 use thinkSession; 7 use thinkRequest; 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="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 hinkcaptchaCaptcha(); 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 appadmincontroller;
3
4 use thinkController;
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 appadmincontrollerBase;
2
3 class Article extends Base