配置文件分3类:系统配置文件,分组配置文件,应用配置文件

①系统配置文件ThinkPHP/Conf/convention.php;

②分组 / 模块 /平台配置文件Home/Conf/config.php;

③应用配置文件Common/Conf/config.php;

(1)综合案例:实现OA系统的登录页面展示

首先需要明确当前功能需要哪些条件MVC

先说下VC

①首先是控制器C

控制器:登录登出放到Public里,控制器名PublicController.class.php

创建控制器文件,编写结构代码

<?php//命名空间的声明
namespace Admin\Controller;//引入父类控制器useThink\Controller;//声明控制器并继承父类class PublicController extendsController{}    }?>

②接下来是展示模板,这里就要设置方法

方法:方法名login,编写方法login,展示模板文件login.html

//登录页面展示
public functionlogin(){$this->display();
}

③对应的模板文件login.html,V

将模板文件复制到指定位置,具体位置浏览器报错已经提示,这里提示位置./Application/Admin/View/Public/login.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>登录</title>
</head>
<body>
<from action='' method='post'>账号:<input type="text" name="name"><br/>密码:<input type="password" name="pwd"><br/><input type="submit" value="登录">
</from>
</body>
</html>

④将相应的静态资源文件js,css,images复制到指定位置

位置:根目录下,与Application同级,/Public/Admin/css或者js或者images

⑤修改模板文件login.html中静态资源的引入路径

这里因为上面自定义常量__ADMIN__ = __PUBLIC__/Admin,所以这里可以写成

<link rel="stylesheet" type="text/css" href="__ADMIN__/login.css">

等价于

<link rel="stylesheet" type="text/css" href="__PUBLIC__/Admin/login.css">

注意:新版PHP中即使不写方法,有时也可以展示模板。只要存在与方法同名的模板,即可渲染出结果。

原理:有方法时会先访问方法,再用模板;没有方法时,会直接调取与方法名相同的模板;如果模板也不存在时报错

.

(2)后台首页

控制器:indexController.class.php

方法:index  home

模板:index.html   home.html

①创建控制器文件indexController.class.php

结构代码:

<?phpnamespaceAdmin\Controller;use Think\Controller;classIndexController extends Controller{}?>

②在控制器里增加方法index,home用来展示模板文件

public functionindex(){$this->display();}public functionhome(){$this->display();}

③将模板文件index.html和home.html复制到指定位置

④修改静态文件引入路径

<link rel="stylesheet" type="text/css" href="__PUBLIC__/Admin/home.css">

⑤纠正Home页面引入路径,因为home是index页面的iframe内联框架。改写为__CONTROLLER__/home

或者使用U方法指定URL地址{:U(home)}

(3)部门管理

1. 设计二级导航效果

①实现前端二级下拉样式

②修改导航数目和跳转地址

2. 实现部门添加功能

控制器:DeptController.class.php

方法:add

模板文件add.html

①控制器中创建add方法,展示模板

public functionadd(){$this->display();
}

②复制模板文件add.html到指定位置View/Dept/add.html

③修改模板文件静态资源路径

④表单中提交按钮和清空按钮a标签编写的无效,修改为input后样式消失。所以通过jquery方法来提交

<script type="text/javascript">$(function(){//提交按钮$('.confirm').on('click',function(){$('form').submit();});//清空按钮$('.clear').on('click',function(){$('form')[0].reset();//表单还原,             //因为reset()是JS的语法,而$('form')是jquery对象,不能直接使用js。所以要进行转化,jquery对象转Dom对象两种方法①加下标;②.get(0)
})})</script>

⑤展示上级部门信息

在控制器DeptController.class.php里传递变量,然后在模板展示

public functionadd(){//展示顶级部门$model = M('dept');//模型实例化$data = $model->where('pid = 0')->select();//条件查询$this->assign('data',$data);//变量分配传递到模板$this->display();}

add.html模板遍历展示

<table border="1" cellspacing="0"><tr><td>id</td><td>name</td><td>pid</td><td>sort</td><td>remark</td></tr><volist name='data' id='vol'><tr><td>{$vol.id}</td><td>{$vol.name}</td><td>{$vol.pid}</td><td>{$vol.sort}</td><td>{$vol.remark}</td></tr></volist>
</table>

案例:下拉菜单

<select><option>上级部门:</option><volist name='data' id='vol'><option>{$vol.remark}</option></volist>
</select>

⑤处理表单信息的提交操作

在控制器deptController.class.php里add方法判断是否是POST提交。若是则提交,否则展示

扩展:

1. 方法判断---------判断请求是否是post,之前用$_POST判断,但在ThinkPHP里系统封装了几个比较实用的常量,可以直接用常量来判断

IS_POST、IS_GET、IS_AJAX、IS_CGI、IS_PUT等

2. 数据接收---------之前用$_POST接收数据,在ThinkPHP里使用I快速方法来接收数据。I方法可以接收任何类型输入post、get、request、put等。且系统默认自带防止SQL

注入的方法(使用PHP内置函数htmlspecialchars,将预定义字符<,>转化为HTML实体字符)。因为$POST没有对数据进行过滤,还得手动过滤。所以推荐使用I方法接收数据

自带过滤效果,防止SQL注入

3.I 快速方法语法:I('变量类型.变量名',['默认值'],['过滤方法']),过滤方法可以自定义过滤

接收整个数组:I('get');

public functionadd(){//判断请求类型,若是post则提交,否则展示if(IS_POST) {//处理表单请求$post = I('post.');//成功接收后,写入数据$model = M('dept');//模型实例化$result = $model->add($post);//判断返回值if ($result) {$this->success('添加成功',U('showList'),3);}else{$this->error('添加失败');//默认跳到上一页
}}else{$model = M('dept');//模型实例化$data = $model->where('pid = 0')->select();//条件查询$this->assign('data',$data);//变量分配传递到模板$this->display();}}

【四】后台登录

(1)分析

控制器:PublicController.class.php

模板:login.html

方法:login   captacha(验证码)  checkLogin(验证登录)

下面按照步骤一次编写:

(2)验证码

①控制器里创建captacha,用于创建验证码;

//生成验证码public functioncaptacha(){ob_clean();//去除Bom(编辑器加的UTF-8标签)//配置$cfg = array('fontSize'  =>  20,              //验证码字体大小(px)'useCurve'  =>  false,            //是否画混淆曲线'useNoise'  =>  false,            //是否添加杂点'length'    =>  4,               //验证码位数'fontttf'   =>  '',              //验证码字体,不设置随机获取
);//实例化验证码类$Verify = new \Think\Verify($cfg);//输出保存验证码图片$Verify->entry();}

②在模板文件login.html输出验证码;

验证码:<img src="__CONTROLLER__/captacha">

③添加点击刷新验证码,给图片绑定点击事件

验证码:<img onclick="this.src='__CONTROLLER__/captacha'" src="__CONTROLLER__/captacha">

这样只在Chrome下生效,测试后在其他浏览器无效。为了兼容其他浏览器需要在地址后面加上随机数,最终代码

验证码:<img οnclick="this.src='__CONTROLLER__/captacha/t/'+Math.random()" src="__CONTROLLER__/captacha">

打开浏览器测试生效,测试Network,会发现点击红藕每次都会发送新的请求,请求不一样。所以生效

(3)验证登录前创建用户表

表名:sp_user

①创建表,表结构

//表结构
create table sp_user(id int(11) not null auto_increment,username varchar(40) not null,password char(32) not null,nickname varchar(40) default null,truename varchar(40) default null,dept_id int(11) default null,sex varchar(10) not null,birthdaydate not null,tel varchar(11) not null,email varchar(50) not null,remark varchar(255) default null,addtime int(11) default null,role_id int(11) default null,primarykey(id)
)engine=myisam default charset=utf8;

新增模拟数据:

insert into sp_user values('1','admin','123456','admin','管理员','1','男','2017-01-06','10000','56@qq.com','石家庄','12345678','1');

②修改模板元素

1. 添加form表单指定提交位置

<form action="{:U(checkLogin)}" method='post'>代码块</form>

2. 对于登录按钮,前端写好的样式为

<a href='index.html' class='btn'>登录</a>

这里改为href='javascript:;',阻止浏览器默认行为,防止点击完就跳页的行为

3. 利用jquery实现表单提交

$(document).ready(function(){$('.btn').on('click',function(){$('form').submit();//提交表单
})})

(4)编写checkLogin方法,验证用户登录

验证顺序,先对验证码进行验证,因为只有验证码不会对服务器发送请求。验证码正确的话再去验证用户名和密码。

具体注意事项在代码里做了介绍

public functioncheckLogin(){//接收数据I方法可以过滤数据$post = I('post.');//校验验证码,因为校验验证码封装在了类Verify里,所以需要实例化类$verify = new \Think\Verify();//不用传参,因为传参是在生成验证码时配置验证码用的//验证操作,成功返回true$result = $verify->check($post['captcha']);//判断验证码是否正确if($result){//验证码正确的话,开始验证用户名和密码,此时需要连接数据库//连接数据库前,先实例化模型$model = M('user');//删除验证码元素,因为要查询,where里接收一维数组,而数据库没有验证码且此时验证码无效了.去掉后$post长度刚好为2unset($post['captcha']);//查询$data = $model->where($post)->find();//判断用户存在与否if ($data) {//存在的话1.用户信息持久化,保存session;2.跳转后台首页session('id',$data['id']);session('username',$data['username']);session('role_id',$data['role_id']);//跳转后台首页$this->success('登录成功',U('Index/index'),3);}else{$this->error('用户名或密码错误');}}else{$this->error('验证码错误');}}

(5)修改登录成功后的用户名

{$Think.session.username}

模板输出系统变量----模板读取session数据,

{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
{$Think.session.user_id} // 输出$_SESSION['user_id']变量 {$Think.get.pageNumber} // 输出$_GET['pageNumber']变量 {$Think.cookie.name} // 输出$_COOKIE['name']变量

支持输出 $_SERVER$_ENV、 $_POST、 $_GET、 $_REQUEST$_SESSION和 $_COOKIE变量。

【五】退出

(1)控制器编写退出方法

//退出方法public functionlogout(){//清除session// session_destroy();原生方法session(null);//跳转登录页面$this->success('登出成功',U('login'),3);}

(2)修改跳转地址,先让其跳到Public/logout,清空session。然后跳到登录页

注意:因为U方法和__PUBLIC、__CONTROLLER__等都是模板常量,只能在模板里使用。所以js文件里无法使用这些常量去跳转路径。除非将js直接写到模板文件里去,例如

<script type="text/javascript">$(document).ready(function(){$('.logout').on('click',function(){var path= "__CONTROLLER__";alert(path);//这里便会提示出模板常量})})</script>

或者在js里写,/表示从域名后开

域名/入口文件/分组/控制器名/方法名window.location.href='/index.php/Admin/Public/logout';

接下来的部门管理在后面文章视频学习笔录---ThinkPHP---案例2--部门管理功能

.

转载于:https://www.cnblogs.com/jianxian/p/8660976.html

ThinkPHP---案例1登录登出和添加部门相关推荐

  1. 基于ThinkPHP框架下登录登出权限控制(一).

    后台管理员表中 做一个加盐处理 md5双从加密: function encrypt_password($password){//加盐$salt = '98765435678908bnjuiygvbnk ...

  2. linux 执行程序 注销,Linux登录登出的过程 | Soo Smart!

    最近一直遇到crontab执行脚本和手动执行结果不一样的问题.根据添加的echo语句已经确定crontab能够准时执行任务,可是脚本里的程序不能正确执行.唯一能确定的是环境变量问题,可是即使明确地写上 ...

  3. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  4. 网易云信集成视频教程(四):如何快速实现iOS登录登出?

    上期我们介绍了如何通过SDK实现自定义消息,第四期视频教程我们将教大家如何快速实现iOS系统下IM登录登出. 第四期 如何快速实现iOS登录登出? 8分钟视频手把手教你接入 文档详解 前期准备 1. ...

  5. 网易云信集成视频教程(一):如何快速实现安卓登录登出?

    由于网易云信稳定.可靠的技术服务以及拥有深厚积淀的行业口碑,越来越多用户集成云信IM和音视频功能.为了提升用户集成效率,我们推出了一系列网易云信集成视频教程,希望帮助用户快速实现功能接入.第一期将为大 ...

  6. ios快捷指令:一键登录/登出南京大学校园网

    软件版本要求:ios13及以上 演示机型:iPhone 12 mini 演示系统版本:ios14.6 文章目录 导言 核心步骤:最简单的一键登录指令 自动化:连接NJU-WLAN后自动登录 修改细节: ...

  7. 从零开始java安全权限框架篇(一):spring security配置登录登出的配置

    目录 一:安全权限框架的选取 二:功能 三:登录登出 四:代码注释 1.将登陆交由Spring security完成 2.前台明文密码加密,与数据库比对 3.关键配置 4.自定义用户异常 5.ajax ...

  8. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  9. SpringBoot登录登出切面开发

    阅读本文约"2.5分钟" 本文开发环境是SpringBoot2.X版本. 对于系统而言(这里多指管理系统或部分具备登录登出功能的系统),登录登出是一个类权限验证的过程,现在一般是以 ...

最新文章

  1. 扶梯正确使用_乘坐自动扶梯解释CSS浮动
  2. SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行
  3. 直播预告 | AAAI 2022论文解读:融入知识图谱的分子对比学习
  4. python加密程序_Python 简单的可逆加密程序
  5. HuggingFace学习1:tokenizer学习与将文本编码为固定长度(pytorch)
  6. 程序员编码能力差,竟是睡眠不足惹的祸?!
  7. GB/T19001—2008质量管理体系要求、标准、贯标(贯彻标准)
  8. F28335中断系统
  9. JavaScript实现视频播放器
  10. 图片默认底部3px缝隙
  11. ios 加载大量图片崩溃_iOS加载单张图片导致崩溃的分析
  12. 细说SSH隧道——本地端口转发
  13. 五年磨一剑,灵雀云的蜕变
  14. robotframework报错
  15. 当今十大备份应用软件
  16. java基础国庆作业_国庆JAVA作业
  17. 如何在Linux中轻松隐藏文件和文件夹
  18. RK3399平台开发系列讲解(UART子系统)4.47、UART子系统详解
  19. OpenCV 中CV_IMAGE_ELEM 的使用
  20. js获取网页文档的各种高度和宽度

热门文章

  1. 实际返回的行数超出请求的行数_代码行数越少越好?
  2. 自学Java要不要背熟语法_JAVASE经典面试问题(必须熟背),你Get到了吗?
  3. 小红书笔记_小红书推广如何打造爆文笔记?
  4. phpcount数组报错_joomla中的PHP错误警告:count():参数必须是实现Countable的数组或对象-问答-阿里云开发者社区-阿里云...
  5. 在Ubuntu 18.04上安装MongoDB
  6. Python complex()
  7. 异步处理函数async_Spring @Async异步处理注释
  8. java java se_Java SE 9:不可变列表的工厂方法
  9. 开课吧:哪些人适合转行做Web前端?
  10. 成为数据分析师需要具备的知识体系