ThinkPHP项目总结
1、当你 require ThinkPHP之后,会自动在App目录下生成 common, Home, Runtime 三个文件夹。
2、输入网址 http://localhost/blog/app/index.php/home/index/index 出现
无法加载控制器:index
错误位置
FILE: D:\xampp\htdocs\blog\ThinkPHP\Library\Think\App.class.php LINE: 90
原因解析:默认情况下是大小写敏感,为了方便,我们可以更改设置:
<?php
return array(
//url 地址大小写敏感设置
'URL_CASE_INSENSITIVE' => true,
);
3、新建一个控制器,注意命名空间,以及继承等。
<?php namespace Home\Controller;
use Think\Controller; class UserController extends Controller{
function login(){
$this -> display();
}
}
4、当写好控制器后,我们需要添加相应的视图文件。

5、连接数据库。对于数据库的连接,我们同样需要更改设置。这里我们使用的是mySQL,具体如下图所示。如果使用的端口号是默认的,密码为空,就不用填写。注意数据库的名字和前缀。

6、在对数据库进行操作之前,我们得先建一个 Model 类,方面和后续的使用。我们在和Home同目录下新建一个 Model 文件夹,写好代码。

7、然后我们开始调用 Model 来操作数据库,输入网址,看到下面的内容就可以知道连接数据库成功了。


8、接下去,我们把之前写好的前端和后台的html等文件都放进来,为了方便后续的操作,我们要对文件进行分类,最终效果如下所示:

其中public 存放一些样式,js文件,图片等。
9、如果我们要访问这些 html 文件的话,还必须添加相应的控制器等。输入网址,访问,我们会发现页面缺少图片和样式。由于 css, js 文件位置的变动,我们必须重新修改这些 url 或者 src 属性。因为这些文件经常用到,所以我们添加了常量,并在html文件中进行修改。这样我们就能看到最终的页面了。


10、采用 Smarty 模板。 这时候只需要更改设置就好。

11、下面我们开始演示注册模块,这里面涉及很多内容。
首先我们编写一个注册用的 Model, 主要是用来验证数据。
<?php namespace Model;
use Think\Model; class UserModel extends Model{
protected $patchValidate = true; //批量验证 protected $_validate = array(
array('username','require','用户名必须!'), //默认情况下用正则进行验证
array('password','require','password必须!'),
array('password2','password','两个必须相等',0,'confirm'),
array('user_email','email','邮箱格式错误',0), ); }
yu
与此同时我们还需要在控制器上编写相应的代码。太长了,不截图,还是放代码实在
<?php namespace Home\Controller;
use Think\Controller; class UserController extends Controller {
function login(){
$this -> display();
} function register(){
// 调用UserModel
$user = new \Model\UserModel(); if(!empty($_POST)){
$z = $user -> create();
if(!$z){
var_dump($user -> getError());
}
// 把数据添加到数据库中去
$rst = $user -> add();
// 判断是否添加成功
if($rst){
echo "success"; }else{
echo "error";
} } $this -> display();
}
}
12、登陆模块。用户登录的时候,需要对用户名和密码进行判断,为了防止 sql 注入攻击,我们首先通过用户名查询存不存在这条数据,然后再来比对密码是否匹配。当然实际上保存的密码应该是加密后的,此处为了方便,没有对密码进行加密。此外,除了用户名密码,还有验证码的,因此还需要对验证码进行设置,比如多少位啊,有没有背景图片,宽和高的长度啊等。具体见如下代码。
为此,我们编写了一个 Model, 内部有一个函数,用来查询用户名密码是否正确。
<?php namespace Model;
use Think\Model; class ManagerModel extends Model {
function checkNamePwd($name, $pwd){
$info = $this -> getByMg_name($name);
var_dump($info);
if($info != null){
if($info['mg_pwd']!= $pwd){
return flase;
}else{
return $info;
}
}else{
return false;
}
}
}
同时存在一个对应的控制器,主要是对验证码的设置与检验,以及对用户名和密码判断,判断正确后可能会进行跳转等等。
<?php namespace Admin\Controller;
use Think\Controller; class ManagerController extends Controller{
function login(){
//var_dump($_POST);
if(!empty($_POST)){
// 首先检查验证码是否正确
$verify = new \Think\Verify();
if(!$verify -> check($_POST['captcha'])){
echo "验证码错误";
}else{
// 在 Model 里面制作一个专门方法进行验证
echo "343";
$user = new \Model\ManagerModel();
// 此处调用 Model 中的函数进行检查
$rst = $user -> checkNamePwd($_POST["mg_username"], $_POST["mg_password"]);
if($rst ===flase){
echo "用户名或密码错误";
}else{
// 保存在 session 中
session('mg_username',$rst['mg_name']);
session('mg_id', $rst[mg_id]);
// session (null); 清空全部;
$this -> redirect('index/index', array('id'=>100, name=>'tom'));
} }
}
$this -> display();
}
// 验证码设置
function verifyImg(){
$config = array(
'useImgBg' => false, // 使用背景图片
'fontSize' => 16, // 验证码字体大小(px)
'imageH' => 40, // 验证码图片高度
'imageW' => 100, // 验证码图片宽度
'length' => 1, // 验证码位数 );
$verify = new \Think\Verify($config);
var_dump($verify->entry()); }
}
13、缓存设置。使用原理,对于某些常用的数据,我们可以进行缓存,还有对于数据库中变化不快的数据,也可以进行缓存。第一次先从数据库中获取,然后放入缓存中,设置有效期。下次访问的时候,就不用从数据库进行查询了,直接从缓存获取。
function y1(){
var_dump($this -> y2());
}
function y2(){
//被其他方法调用,获得指定信息
$info = S('goods_info');
if($info){
return $info;
}else{
// 没有缓存就从数据库获取数据
$dt = "apple5s".time();
S('goods_info',$dt,10);
return $dt;
}
}
y2 是通用方法,之所以不直接在 y1 里写,是因为,有时候可能不止只有 y1 需要, 其他函数也会用到,因此,我们就将其放在 y2 里面。
14、附件上传。
15、基于角色的访问权限控制

对角色进行权限划分
员工直接面对角色、角色直接面对具体操作权限
新员工入职只需要确定其角色,他的权限就由角色来确定
员工-------------角色--------------操作权限
现在权限分配非常容易,也非常科学
新员工入职公司只需要把其角色划分好,它的权限有角色确定
sw_manager 后台用户管理员表
sw_role 角色表
sw_auth 具体权限表
1. 数据模拟



2. 通过已经模拟好的数据进行相关程序开发
a) 用户登录系统,左边显示权限按钮会根据具体角色显示
b) 在左边(Admin/Index/left)显示对应的权限信息
- 用户登录系统显示权限信息 $_SESSION[‘mg_id’]
- 根据session信息获得角色role_id信息
- 根据角色id信息获得权限列表ids信息
- 根据权限ids信息查询具体权限信息进而显示

虽然给用户及角色分配了权限,也实现对应的权限的显示
但是用户可以通过显示修改url地址达到访问其他权限的目的
解决:
每次用户访问的控制器和方法都需要和对应的角色里边的ac信息进行比较
ac信息里边存在这个控制器和方法就允许访问,否则禁止访问
技术角度:
在每个控制器被实例化执行的同时就判断当前的控制器和方法是否允许角色访问
为了程序维护方便,给普通控制器制作父类控制器,在父类控制器的构造方法里边做控制器和方法的过滤工作。
普通控制器引入新的父类AdminController,
1. 在新父类控制器AdminController里边实现每次访问控制器和操作方法过滤
a) 具体限制分三种情况
- 自定义方法不进行权限限制(Index/head left right Manager/login)
- 系统管理员也不进行权限限制
- 当前用户允许访问的权限就是角色对应的权限

16.角色维护
Admin/Role/showlist 显示角色信息
把许多复选框的权限表单的信息收集起来保存到角色的数据表中
在设置权限的时候,把已经有的权限给显示出来(复选框有被选中)
当前角色知道,当前角色对应的权限ids也知道,也可以把ids由字符串变为数组
遍历权限的时候把id与ids的数组做比较,判断是否是其中的一个元素,进而设置checked属性 in_array()
1. 制作表单显示具体被分配权限信息

2. 收集权限信息在RoleModel模型里边保存

3. 分配权限时候,已经有的权限,复选框需要被选中

4. 展示分配权限信息的表单对应控制器部分:

17、权限维护
展示、添加权限
AuthController
function showlist()
function add()
1. 展示权限信息,及名字设置缩进关系字样

2. 添加权限
3. 优化
① 添加权限父级只显示level=0 或level=1
getInfo传递不同参数,获得的信息也略有差异

② 为角色分配权限,显示三级权限

18、【管理员列表实现】
Manager/showlist
总结:
1. 通过角色分配权限维护
2. 维护权限数据,添加权限
a) auth_path
b) 帮组我们对数据进行排序显示
c) 全路径:父级的全路径和本身id结合的信息
d) auth_level
e) 基本:
3. 维护管理员数据,角色信息( {html_options} )
ThinkPHP项目总结的更多相关文章
- 在IIS下部署Thinkphp项目,验证码不能显示的解决办法
由于公司租用的是虚拟空间,而且用的是IIS服务器,所以部署PHP的时候就出现很多问题:比如昨天就碰到这个问题:在IIS下部署Thinkphp项目,验证码不能显示 这是生成验证码的方法: // 制作专门 ...
- 夺命雷公狗ThinkPHP项目之----企业网站1之快速搭建后台
我们还是老规矩照老方法,将框架里面多余的东西都干掉,然后在index.php里面将框架搭建起来 <?php //定义项目目录 define('APP_PATH','./WEB/'); //开启调 ...
- thinkphp项目在apache服务器中“去掉”index.php后出现找不到url的问题
今天将MAC中apache环境下的thinkphp项目移植到windows中得apache环境下.原本都是apache环境,而且配置都一样,死活给我这样的提示: Not Found The reque ...
- ThinkPHP项目 公共方法存放位置
ThinkPHP项目公共方法写在 根目录-> app-> common 里面 ThinkPHP模板公共方法卸载 根目录->app->模块名称->common 里 ...
- ThinkPHP - 3 - IDE选择以及Eclipse PDT打开ThinkPHP项目
ThinkPHP框架已部署到SAE(新浪云),且代码已获取到本地.眼前面临的问题就是,对ThinkPHP项目选择哪种开发工具(IDE)? 经过简单的查找比较,以及电脑里已装有Eclipse的因素,遂决 ...
- ThinkPHP项目怎么运行?
1.下载ThinkPHP项目 2.安装核心框架framework 3.配置集成开发环境:wamp或者xampp或者phpStudy
- thinkphp项目上传到github,为什么缺少很多文件
thinkphp项目上传到github,为什么缺少很多文件 问题: 把tp5项目push到码云(类似github)上,为什么没有thinkphp这个核心库? 然后我看了下码云和github上,官方的t ...
- thinkphp项目阿里云ECS服务器部署
[日记]thinkphp项目阿里云ECS服务器部署 项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 ...
- Linux 下ThinkPHP项目出现_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450033aa87c28a760f4.php
在Linux中部署了ThinkPHP项目,访问时却出现了_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450 ...
- 【日记】thinkphp项目阿里云ECS服务器部署
项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 1.因为线上已经有几个站点了.所以要配置ngnix多站 ...
随机推荐
- iOS 之 OC开发实战
iOS 开发之登陆 iOS 程序初始一个带导航栏的视图 iOS 添加导航栏两侧按钮 iOS UITabBar
- js原生设计模式——10适配器模式之参数适配器
原理:参数适配器说白了就是给出要带入数据字段的对应字段的默认值,一旦数据字段值不足,就取默认值补足. [写法一]:直接返回 <!DOCTYPE html><html lang=&qu ...
- HTTP协议缓存策略深入详解之ETAG妙用
Etag是什么: Etag 是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等.具体内部含义是使服务器控制的,就像Cookie那样. HTTP协议规格说明定义 ...
- jQuery addClass removeClass toggleClass hasClass is(.class)用法
jQuery addClass removeClass toggleClass hasClass is(.class)用法 <%@ page language="java" ...
- Markdown使用教程
Markdown 是一种 轻量级标记语言,主要特点是:使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档". 本文参考了:语法手册.简书介绍. 常用语法 一.标 ...
- 前端自动化构建工具-yoman浅谈
如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...
- 001.MVC基本概述
MVC的基本概念 一.NET平台下开发web应用程序的方案(方法) 方案A:ASP.NET webForm1.web窗体:臃肿(胖)性能低 优点:有很多的web控件可以使用,能够方便的和服务端交互(数 ...
- JAVA finally字句的异常丢失和返回值覆盖解析
转载:http://blog.csdn.net/sureyonder/article/details/5560538 Java虚拟机在每个try语句块和与其相关的catch子句的结尾 处都会“调用”f ...
- json基础教程|理解Json
一. 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.这一期讨论一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地 ...
- win10更新时遇到错误0x80070002的正确处理方法
win10更新Flash Player.或者在 “启用或关闭windows功能” 经常出现提示错误0x80070002,这要怎么解决呢?这里介绍下正确的错误代码0x80070002解决办法. 严肃提 ...