搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
ThinkPHP实战
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302466529
  • 作      者:
    夏磊著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2017
收藏
编辑推荐
  本书实战性很强,没有冗长的概念讲解,都是实际项目中使用的实用技术,比如验证码、文件上传、图像处理、调试、安全、缓存等。留言板、博客、论坛、微信公众平台开发4个实战项目案例,使读者尽快切入ThinkPHP企业级项目开发。
展开
作者简介
  夏磊,目前从事软件开发工作。精通PHP服务器脚本语言技术,善于把握运用新技术,如LAMP&LNMP平台以及Node.js平台下Web软件的开发、软件架构、设计模式等。作者博客上大量的PHP相关技术文章,深受读者好评。
展开
内容介绍
  PHP是一种通用开源脚本语言,开源、跨平台、易于使用,主要适用于Web开发领域。MVC模式使得PHP在大型Web项目开发中耦合性低、重用性高、可维护性高、有利于软件工程化管理。本书以实用性为目标,系统地介绍了ThinkPHP框架的相关技术及其在Web开发中的应用。
  全书共14章,每一章都是相对独立的知识点的集合。内容涵盖了ThinkPHP常用功能模块和实用技巧、MySQL数据库的设计与应用、完整的Web项目开发流程等目前PHP开发中*主流的技术,每一章都有大量的示例以及详尽的注释,便于读者的理解和掌握。*后通过4个完整的项目详细介绍了Web应用从设计到运行的各个环节,便于读者更好地实践。
  对于拥有PHP基础而不知道下一步该做什么的读者而言,本书不失为一本好的入门教材,本书所有的实例都可以在Web开发中直接使用,使读者能够加快Web应用开发的进程。此外,本书也适合对于网络开发有兴趣的读者,以及大中专院校和培训机构的师生阅读与参考。
展开
精彩书摘
  第 12 章
  博客系统项目实战 ?
  12.1 项目目的
  本博客系统项目目的如下:
  记载个人学习、工作、生活上一些值得回味的事情,以及一些值得分享或者探讨的技术。
  用于社会沟通和交友,和他人分享自己的成功。
  自我学习、自我提高。
  12.2 需求分析
  提到博客,大部分人都不会陌生,毕竟大名鼎鼎的wordpress可是业界神话。本章需要实现的也是一个博客系统。当然,并没有wordpress那么强大,不过“麻雀虽小、五脏俱全”,一个博客应有的功能还是需要有的。
  写作。博客的核心功能就是写作,而且是独自写作,有写作就有文章,有文章就涉及文章的分类、发表、编辑、删除。
  评论。既然项目目的中有“用于社会沟通和交友”,那么社会上的读者如何与作者互动呢?所以,评论功能必不可少。有了评论就需要发表评论、管理评论。
  友情链接。好文章如何让别人知道呢?单凭自己的力量是不够的,所以合理地与他人交换友情链接是博客的一种推广手段。
  12.3 功能设计
  通过需求分析的结果,可以总结出博客系统需要以下功能:
  ? 管理员登录、修改密码、退出登录。
  ? 文章分类添加、编辑、删除。
  ? 文章添加、编辑、删除。
  ? 发表评论、管理评论。
  ? 添加友情链接、删除友情链接、展示友情链接。
  12.4 数据库设计
  根据需求分析以及功能设计,设计出如图12-1所示数据库模型。
  图12-1
  可以看到分类表、文章表、评论表之间存在关系。
  12.5 数据库字典
  1. 文章分类(blog_category)
  文章分类表设计如表12-1所示。
  表12-1
  字段名称 类型 说明
  categoryId int(10) 主键,自增
  name varchar(20) 分类名称
  isNav tinyint(1) 是否显示在导航栏
  total int 文章总数
  sort tinyint(4) 排序
  2. 文章表(blog_article)
  文章表设计如表12-2所示。
  表12-2
  字段名称 类型 说明
  articleId int(11) 主键,自增
  Title varchar(40) 文章标题
  Description varchar(100) 文章简介
  Image varchar(128) 文章封面
  Hits int(11) 点击数
  createdAt int(11) 文章发布时间(时间戳)
  updateAt int(11) 文章更新时间
  Status tinyint(1) 状态(发表,不发表)
  Sort int 文章排序
  Content text 文章正文
  categoryId int 分类ID
  3. 文章评论表(blog_comment)
  文章评论表设计如表12-3所示。
  表12-3
  字段名称 字段类型 说明
  commentId int 主键,自增
  nickname varchar(20) 昵称
  createdAt int(11) 评论时间
  createdIp varchar(15) 评论IP(只考虑IPV4)
  content text 评论内容
  articleId int 文章ID
  4. 管理员表(blog_admin)
  管理员表设计如表12-4所示。
  表12-4
  字段名称 字段类型 说明
  adminId int 管理员ID
  username varchar(20) 用户名
  password char(32) 密码(md5加密后密文)
  createdAt int 账号添加时间
  loginAt int *近登录时间
  loginIp int *近登录IP
  5. 友情链接表(blog_link)
  友情链接表设计如表12-5所示。
  表12-5
  字段名称 字段类型 说明
  linkId int 主键,自增
  name varchar(20) 网站名称
  link varchar(100) 链接地址
  status tinyint(1) 状态
  sort int 排序
  12.6 模块设计
  12.6.1 Admin模块
  admin为后台管理模块,需要管理文章、分类、评论、友情链接等功能。所以根据功能应该分开4个Controller进行处理。Controller如下:
  ? ArticleController,文章控制器。
  ? CategoryController,分类控制器。
  ? CommentController,评论控制器。
  ? LinkController,友情链接控制器。
  1. 权限检测
  由于admin模块属于受保护的模块,所以以上4个控制器必须登录后才能正常访问,为了不写重复代码,需要新建一个控制器处理登录检测,以上4个控制器继承该基本控制器实现统一权限检测。
  在Admin模块新建BaseController.class.php,添加_initialize方法,代码如下:
  protected function _initialize()
  {
  if (session('admin.adminId') === null)
  {
  $this->error('请登录', U('admin/index/login'));
  }
  C('LAYOUT_NAME', 'admin');
  }
  需要进行权限检测的控制器继承BaseController即可。
  2. 分页处理
  由于该博客系统是一直在线上运行的,所以数据量不可预测,在列表页需要进行分页处理。以下是友情链接主页的分页代码:
  public function index()
  {
  $model = new Model('Link');
  $count = $model->count();
  $page = new Page($count);
  $show = $page->show();
  $list = $model->order('linkId DESC')->limit($page->firstRow . ',' . $page->listRows)->select();
  $this->assign('list', $list);
  $this->assign('page', $show);
  $this->display();
  }
  3. 文章-分类模型
  文章是属于分类的,所以读取文章列表的时候需要将分类信息同时查询处理,这里使用ThinkPHP提供的ViewModel,在Common模块新建Model文件夹,在Model文件夹下新建ArticleCategoryViewModel.class.php,代码如下:
  namespace Common\Model;
  use Think\Model\ViewModel;
  class ArticleCategoryViewModel extends ViewModel
  {
  public $viewFields = array(
  'Article' => array('articleId', 'title', 'description', 'image', 'hits', 'createdAt', 'updateAt', 'status', 'sort', 'content'),
  'Category' => array('categoryId', 'name', '_on' => 'Article.categoryId=Category.categoryId')
  );
  }
  ViewModel的知识可以在第5章第9节查看。
  4. 文件上传
  在设计文章表的时候,有个封面字段,这个字段是用来保存文章封面的,所以需要做一个图片上传的功能。为了贯彻“模块化”的思想,笔者特地将上传模块抽象出来,只要在需要上传的页面include即可。
  在Admin模块的View文件夹添加Common文件夹,在Common文件夹下添加upload.html,代码如下:
  点击上传
  该段代码与一般代码区别不大,但是重点在于:
  uploadCallback && uploadCallback(data.url);
  如果当前页面定义了uploadCallback函数,则将上传后的结果回调到该函数。
  上传代码,编辑Admin模块下的Index控制器,添加upload方法,代码如下:
  public function upload()
  {
  $upload = new Upload();// 实例化上传类
  $upload->maxSize = 1024 * 1024 * 2;// 设置附件上传大小
  $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
  $upload->rootPath = __DIR__ . '/../../../upload/'; // 设置附件上传根目录
  $upload->savePath = ''; // 设置附件上传(子)目录
  // 上传文件
  $info = $upload->upload();
  if (!$info)
  {
  $this->ajaxReturn(array(
  'error' => $upload->getError()
  ));
  }
  else
  {
  $path = $upload->rootPath . $info['file']['savepath'] . $info['file']['savename'];
  $image = new Image();
  $image->open($path);
  $image->thumb(200, 200, Image::IMAGE_THUMB_CENTER)->save($path);
  $this->ajaxReturn(array(
  'url' => U('/', '', false, true) . 'upload/' . $info['file']['savepath'] . $info['file']['savename']
  ));
  }
  }
  使用时直接使用以下代码引入即可(示例代码在Application/Admin/View/Article/post.html中):
  由于回调函数已经写死了“uploadCallback”,所以目前来说该上传组件一个页面只能使用一个。
  Admin模块比较重要的功能就是以上列出来的,其他功能基本上都是添加、编辑、列表、删除功能,由于篇幅关系这里不再赘述,有需要的读者可以前往github下载源码:
  https://github.com/xialeistudio/thinkphp-inaction/tree/master/blog
  12.6.2 Common模块
  1. 分类处理
  Common模块是公用模块,其他模块公用的功能可以放在该模块下,比如上文中的“文章-分类模型”就是公用Model,所以放在Common/Model下。
  博客系统在设计文章分类时有“isNav”字段,该字段用来标识分类是否是导航栏中的分类,所以可以明确出来的需求有:
  ? 读取属于导航栏的分类(status为1)
  ? 读取不属于导航栏的分类(status为0)
  ? 读取全部分类
  而以上需求返回值都是一致的,也就是分类列表,所以可以将以上三个需求封装成一个函数,根据传入的status来决定返回数据。
  编辑Application/Common/Common/function.php,添加如下代码:
  /**
  * 获取分类
  * @param int $isNav
  * @return mixed
  ……
展开
目录

第1章 ThinkPHP入门 1
1.1 MVC模式概述 1
1.2 ThinkPHP是什么 2
1.3 搭建PHP开发环境 2
1.3.1 获取UPUPW 2
1.3.2 安装UPUPW 3
1.3.3 目录结构说明 4
1.3.4 添加虚拟主机 4
1.3.5 安装集成开发环境PHPStorm 6
1.4 *个ThinkPHP程序 7
1.5 应用结构说明 8
1.5.1 目录说明 8
1.5.2 入口文件 8
1.5.3 自动生成 9
1.5.4 模块 9
1.5.5 控制器 9
1.6 术语解释 10
1.7 小结 11
第2章 配 置 12
2.1 配置类型 13
2.1.1 默认配置 13
2.1.2 公共配置 13
2.1.3 模式配置 13
2.1.4 调试配置 14
2.1.5 场景配置 14
2.1.6 模块配置 14
2.1.7 扩展配置 14
2.1.8 动态配置 15
2.2 配置操作 15
2.2.1 C函数 16
2.2.2 读取配置 17
2.2.3 加载扩展配置 19
2.2.4 写入配置 20
2.3 小结 23
第3章 路 由 24
3.1 URL的三种模式 24
3.1.1 动态URL 24
3.1.2 静态URL 25
3.1.3 伪静态URL 25
3.2 ThinkPHP的路由 25
3.2.1 路由模式 25
3.2.2 路由配置 29
3.3 小结 34
第4章 控制器 35
4.1 控制器的定义 35
4.2 前置操作和后置操作 37
4.3 动作参数绑定 38
4.4 伪静态 40
4.5 URL大小写 40
4.6 URL生成 41
4.6.1 地址表达式 41
4.6.2 参数 41
4.6.3 伪静态后缀 41
4.6.4 URL模式处理 41
4.6.5 生成路由地址 42
4.7 Ajax返回 42
4.8 重定向和页面跳转 43
4.8.1 重定向 43
4.8.2 页面跳转 44
4.9 HTTP请求方法 46
4.10 读取输入 48
4.11 空操作 50
4.12 空控制器 51
4.13 小结 52
第5章 模 型 53
5.1 准备工作 53
5.2 模型定义 54
5.3 模型实例化 54
5.3.1 new实例化 54
5.3.2 M函数实例化 55
5.3.3 D函数实例化 55
5.3.4 空模型实例化 55
5.4 连贯操作 55
5.4.1 where 56
5.4.2 table 57
5.4.3 alias 57
5.4.4 data 58
5.4.5 field 58
5.4.6 order 59
5.4.7 limit 60
5.4.8 page 61
5.4.9 group 61
5.4.10 having 61
5.4.11 join 61
5.4.12 union 62
5.4.13 distinct 62
5.4.14 lock 62
5.4.15 cache 63
5.4.16 fetchSql 63
5.4.17 strict 64
5.4.18 index 64
5.5 CURD操作 64
5.5.1 创建数据 64
5.5.2 插入数据 65
5.5.3 读取数据 65
5.5.4 更新数据 66
5.5.5 删除数据 67
5.6 查询语言 68
5.6.1 查询方式 68
5.6.2 表达式查询 68
5.6.3 快捷查询 70
5.6.4 区间查询 71
5.6.5 统计查询 71
5.7 自动验证 72
5.8 自动完成 78
5.9 视图模型 82
5.10 关联模型 85
5.10.1 HAS_ONE 85
5.10.2 BELONGS_TO 88
5.10.3 HAS_MANY 89
5.10.4 MANY_TO_MANY 90
5.11 小结 91
第6章 视 图 92
6.1 模板定义 92
6.2 模板主题 92
6.3 模板赋值 93
6.4 模板渲染 93
6.5 总结 94
第7章 模 板 95
7.1 变量输出 95
7.1.1 输出形式 95
7.1.2 测试 96
7.2 系统变量 98
7.2.1 语法形式 98
7.2.2 配置输出 98
7.2.3 测试 98
7.3 函数 100
7.3.1 函数类型 100
7.3.2 测试 100
7.4 变量默认值 101
7.4.1 语法形式 101
7.4.2 测试 102
7.5 算术运算符 103
7.5.1 语法形式 103
7.5.2 测试 103
7.6 模板继承 105
7.6.1 语法形式 105
7.6.2 测试 106
7.7 视图包含 107
7.7.1 语法形式 107
7.7.2 模板表达式 107
7.7.3 模板文件 107
7.7.4 测试 107
7.8 内置标签 108
7.8.1 volist标签 109
7.8.2 foreach标签 110
7.8.3 for标签 110
7.8.4 switch标签 111
7.8.5 比较标签 111
7.8.6 empty标签 114
7.8.7 defined标签 114
7.8.8 标签嵌套 114
7.8.9 import标签 115
7.8.10 使用原生PHP 115
7.8.11 不解析输出 115
7.9 模板布局 116
7.10 模板常量替换 116
7.11 模板注释 117
7.12 测试 118
7.13 总结 126
第8章 调 试 127
8.1 调试模式 127
8.2 异常处理 127
8.3 日志 128
8.3.1 日志级别 129
8.3.2 记录方式 129
8.3.3 写入日志 129
8.4 变量输出 130
8.5 执行统计 130
8.6 SQL输出 131
8.7 测试 131
8.7.1 异常测试 131
8.7.2 日志测试 132
8.7.3 变量输出测试 133
8.7.4 执行统计测试 133
8.7.5 SQL输出测试 134
8.8 总结 135

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证