TP5第三天
composer
什么是composer
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的类库,它会在你的项目中为你安装他们。
假设有个文件A.php,我们项目中使用需要就include A.php 包含进来,但是A.php又基于B.php,所以我们在A.php文件中又需要include B,但是不幸的B.php又基于C.php和D.php,于是又要在B.php进行include C.php和D.php 。假设C和D文件又基于其他文件,那么这样互相依赖的引入是非常麻烦的。
那么在项目中使用composer就可以解决各个文件互相依赖的问题。除了解决文件依赖的关系,它还有更多的优点:
- 下载网络上我们项目所需要的类库。
- 可对下载的类库进行管理,如:删除、更新等众多便利的操作。
其实composer也就类似与Linux中yum,前端中的npm、bower等操作。这些工具都是可以用来管理我们的代码的。
安装composer
安装方式一般有两种方式:
第一种:去composer官网( https://getcomposer.org/download/ )下载Composer-setup.exe进行安装,由于此软件安装需要联网且服务器在国外安装很难成功,所以这里推荐使用下面第二种方式进行安装。
我们使用下面的安装方式
第二种:去官网https://getcomposer.org/download 下载composer.phar文件。
找到并进入 PHP 的安装目录,将下载的composer.phar 复制到 PHP 的安装目录下面,也就是和 php.exe 在同一级目录。
在 PHP 安装目录(D:\phpStudy\php\php-5.6.27-nts)下新建一个 composer.bat 文件,并将下列代码保存到此文件中。
@php “%~dp0composer.phar” %*
至此composer的安装就完成。
进入目录D:\phpStudy\php\php-5.6.27-nts中输入composer指令,出现如下提示代表安装成功:
为了可以全局(任意位置)访问composer,可以把php.exe的所在目录(D:\phpStudy\php\php-5.6.27-nts)定义在环境变量path选项中。
设置好后输入php -v即可看到php版本号。
cmd中任意位置输入composer指令:
配置composer为国内镜像
由于composer需要去网址为https://packagist.org获取代码库地址,再通过地址去github上去下载代码到我们项目本地,由于这两个地址服务器都在国外,访问比较慢,也不稳定。
配置国内镜像:输入命令
全局配置:composer config -g repo.packagist composer https://packagist.phpcomposer.com
局部配置:若只想在当前项目中有效,把上面的命令去掉 -g 即可。
几个有关的composer命令:
查看全局配置信息:composer config -gl
取消镜像:composer config -g –unset repos.packagist
查看当前版本:composer -v
升级版本:composer selfupdate
使用composer安装tp5验证码
手册位置:杂项–>验证码
composer.json的文件说明和具体使用:
参考网址:http://docs.phpcomposer.com/04-schema.html#archive
第一步:切换到tp5的composer.json 所在的目录,输入指令 composer require topthink/think-captcha进行安装
在当前目录打开cmd:ctrl+shfit+鼠标右键
安装成功后,会在vendor目录多出think-captcha
注:默认下载的tp5框架已经帮我们下载好了验证码,直接使用即可。
完成登录的验证码功能
我们需要把通过composer下载下来的验证码应用到我们tp5项目中。
手册位置:杂项–>验证码
或:https://packagist.org/packages/topthink/think-captcha
第一步:在login.html显示验证码
第二步:通过配置定义验证码的显示配置
第三步:登录时,判断验证码是否匹配成功
四、AR模式操作数据库
1、AR介绍
Active Record (AR) 模式 是一个流行的 对象-关系映射 (ORM) 技术。 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行。 常见的 CRUD 操作作为 AR 的方法实现。因此,我们可以以一种更加面向对象的方式操作数据库。
AR模式三个核心:
表–>模型类
表中一行–>模型对象
行的某列–>模型对象属性
AR模式完成CURD操作
AR完成新增
手册示例:
AR完成删除
手册示例:
AR完成更新
AR完成查询
完成文章分类的添加
1、完成模板数据的展示
第一步:修改后台的链接地址(left.html)
第二步:在后台admin建立一个Category的控制器,并建立一个add方法完成添加分类的功能
第三步:在当前模型的中,建立一个无限极分类的函数,完成栏目之间额层级缩进
第四步:模板中显示数据
效果:
完成数据的入库
第一步:在add方法中判断是否是post请求,完成数据的入库
第二步:使用验证器Validate进行入库前的数据验证过滤
建议把上面的验证写在一个验证器中,进行统计管理,也方便后期代码的维护,也可以增加代码的可读性。
所以,我们可以把上面的规则和提示信息抽离出来,写在独立的验证器中:
在add的方法中使用上面的验证器进行验证即可:
validate方法的源码位置:
此方法验证成功会返回true。
验证失败会返回错误信息,若不是批量验证返回一个字符串的错误信息,批量验证则返回一个错误的数组,可以使用implode拼接成一个字符串进行提示。
完成文章分类的列表展示
第一步:修改left.html加一个链接地址
第二步:在Category控制器加一个index 的方法完成分类的列表数据输出给模板
其中$newlists的数据打印如下:以每个元素cat_id作为下标。
第三步:模板中显示数据
上面的由于数组$lists下标0不存在,所以需要isset判断一下,但是这样写较麻烦,可以通过配置不报这种错误。修改common.php即可。
效果:
注:其中create_time和update_time在数据库中是时间戳的格式,但是受到配置文件database.php 的影响,获取数据时,自动转化为日期格式:
完成文章分类的编辑
第一步:修改列表的编辑的链接地址
第二步:在Controller控制器建立一个upd方法,完成编辑的功能
第三步:模板upd.html设置
小技巧:$(“select[name=’pid’]”).val(3); //代表把option标签value等于3的父分类默认选中
当然也可以使用下面的eq来判断,但是不推荐,因为比较麻烦,而且还要模板标签还要编译效率低。
使用Ajax完成文章分类的无刷新删除
传统删除
第一步:给删除设置链接地址
第二步:在Category控制器建立一个del方法,完成分类的删除
作业:删除分类考虑的两点
- 当前分类下面是否有子分类
- 当前分类下面是否存在文章
满足上面两个条件之一都不能删除。
2、ajax无刷新删除
删除分类考虑的两点
- 当前分类下面是否有子分类
- 当前分类下面是否存在文章
满足上面两个条件之一都不能删除。
第一步:给删除的a标签阻止默认行为,并且加一个自定义的属性cat_id,为了记录当前要删除的分类cat_id,同时设置一个delCat,目的给这一类的元素绑定单击事件
第二步:给class=’delCat’,绑定单击事件,获取属性cat_id,发送ajax请求
第三步:去Category控制器,建立一个ajaxDelCat的方法
第四步:ajax根据服务端响应的json数据,删除成功把当前tr给移除掉
完成文章的添加
完成文章模板的展示
第一步:修改left.html模板,加一个添加分类的链接地址
第二步:在后台admin创建一个Article控制器,并建立一个add方法,完成文章的入库操作
模板分配数据:
使用富文本编辑器完成文章的内容添加
第一步:把课件中的相应的ueditor复制到网站根目录下面的插件目录plugin中
第二步:引入核心js文件,并且给textarea 设置一个id=content
效果如下:
完成文章数据的入库
第一步:设置表单name值
第二步:在add方法中,完成数据的入库
4、使用验证器完成添加文章的验证
5、完成文章的图片上传
6、完成文章图片缩略图生成
十、完成文章的列表展示
数据展示
2、数据分页