博主信息
陈文鹏的博客
博文
20
粉丝
0
评论
0
访问量
19027
积分:0
P豆:126

ThinkPHP的使用

2017年08月12日 22:30:10阅读数:525博客 / 陈文鹏的博客/ ThinkPHP

<!doctype html>

<html>

<head>

<title></title>

<style>

body{

font-size:20px;

}

strong,b{

color:red;

}

*{

margin:0;

padding:0;

}

</style>

</head>

<body>

<pre>

<xmp>

<!--apache主配置文件,AllowOverride All是允许使用.htaccess这个文件-->

<VirtualHost *:80>

        ServerName www.tpshop.com 

        ServerAlias tpshop.com

        DocumentRoot "d:/php/tpshop"

        DirectoryIndex index.php

        <Directory "d:/php/tpshop">

            Options Indexes FollowSymLinks

             AllowOverride All

             Order Deny,Allow

            Allow from All

        </Directory>

</VirtualHost>

<!--打开apache配置文件httpd.conf里面的mod_rewrite.so的扩展(删除最前面的#号即可)-->

什么是路由:

答:系统从URL参数中分析出当前请求的分组、控制器和操作的过程就是“路由”。


tp框架路由共有4种形式:

①基本get形式

http://网址/index.php?m=分组&c=控制器&a=操作方法

该方式是最底层的get形式、传统的参数传递方式,不时尚、不安全。

②pathinfo路径形式[默认方式]

http://网址/index.php/分组/控制器/操作方法 

http://网址/index.php/Home/Index/advert

③rewrite重写形式(伪静态技术)省略index.php入口文件

http://网址/分组/控制器/操作方法

http://网址/Home/Index/index

④兼容形式

http://网址/index.php?s=/分组/控制器/操作方法

http://网址/index.php?s=/Home/Index/advert

以上四种模式除了第③种,其他的url模式都可以使用



</xmp>

<strong>

在框架中使用注释,注释不管用,所有对于不需要的直接删除

而起对于导入文件的内容要加个/,说明结束是结束标签

U函数动态生成url

TP框架提供了一个自定义的函数U(),用来动态生成url

注意事项:第一个参数模块名称前面不要加斜杠

U第一个模版名称不要加/,第二个参数可以是字符串或者是数组,第三个数是true.html后缀也可以自己定义,第四个填写true代表的是加域名</strong>

1.简单模板view调用

$this -> display();   //模板名称与当前控制器、当前操作方法的名称一致

$this -> display(模板名称);   //调用当前控制器对应目录指定名称的模板

$this -> display(控制器/模板名称);  //调用其他控制器下的具体模板文件

2.tp框架有两种模式:开发(调试)、生产[默认]

生产模式:错误提示模糊

开发模式:错误提示友好

define(‘APP_DEBUG’,true);   //开发

define(‘APP_DEBUG’,false);   //生产

3.获得当前请求的全部常量信息:

dump(get_defined_constants(true));

4.TP框架中定义好的一些模版字符串,可以用来代替一些网站地址(目录地址)

__ROOT__:会替代当前网站的地址(等于什么都没有)

__APP__:会替代当前应用的URL地址

__MODULE__: 路由地址分组信息 (http://网址/index.php/分组)

__CONTROLLER__: 路由地址控制器信息  (http://网址/index.php/分组/控制器)

__ACTION__:路由地址操作方法信息 (http://网址/index.php/分组/控制器/操作方法

__SELF__: 路由地址的全部信息 (http://网址/index.php/分组/控制器/操作方法/名称/值/名称/值)

MODULE_NAME:  分组名称

CONTROLLER_NAME:控制器名称

ACTION_NAME: 操作方法名称

__PUBLIC__ 替换的是/Public ,后面没有斜杠了,手册上有误

使用__PUBLIC__ 替换模板文件中的/Public

5.将已有前台模板与框架做结合(重点)

①在项目根目录新建一个Public目录,把所有的css,js,images等静态资源移动过来,Home分组的静态资源放在/Public/Home目录下

②针对每一个页面,定一个请求地址,分组(Home),控制器,方法。

前台首页index.html   Home分组  Index控制器  index方法

③把页面移动到Application/Home(当前分组)/View/控制器名文件夹下

④修改html模板页面中的静态资源引入路径

6、内置标签之文件导入

TP框架内置了一些模板标签。其中就有一个import用来导入文件的。

<xmp>

<import type='css' file='home.css.style#min'/>

<import type="js" file="home.js.#min">

如果js文件是压缩的后面的min前面用#来使用,后缀.js可以省略

</xmp>

说明:type是文件类型,css或者js,默认是js.

file是要导入的文件路径,路径从Public下的目录名开始,其中的目录分隔符用点号代替,文件名后缀.css或者.js省略,如果文件名中还有点号,需要用#号代替

这种文件导入方式和html中link标签和script标签导入文件是等效的。

TP框架中的模板标签实现原理,使用xml的语法,所以需要严格遵循xml的语法。

7、内置标签之文件包含

通常在很多页面都有相同的代码部分,比如公共的头部和尾部,这些代码可以

提取出来单独存放到一个文件中,方便以后的维护,只需要一个公共的文件中,方便以后的维护,只需要维护这一个公共的文件。在原来的页面上通过一个文件包含标签来引入这一部分公共的代码。

<xmp>

<include file="Common/header"/>

</xmp>

File属性,要包含的文件路径,直接在当前分组下的View目录去找,从View下的子目录开始写路径,文件名称不需要带后缀。

示例:

前台首页和商品详情页都有公共的头部代码,可以提取到View/Common/header.html文件中

<b>ThinkPHP框架中的代码调试</b>

1.dump函数

TP框架封装了一个dump函数来调试数组变量

2.代码追踪--页面trace功能

在配置文件中来设置开启页面trace功能:

"SHOW_PAGE_TRACE"=>true

<b>细节处理</b>

1. 配置文件介绍

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

② shop/Common/Conf/config.php   当前shop项目的配置文件

③ shop/Home/Conf/config.php      当前shop项目Home分组的配置文件

以上三个配置文件,如果存在同名的配置变量,后者会覆盖前者。

系统里边并不是全部的配置变量都有在convention.php里边定义

A. 大部分在convention.php有定义

B. 在Behavior行为文件里边有定义一部分(例如:SHOW_PAGE_TRACE)

C. 在框架的代码角落里边有零星的一点配置变量(例如:MODULE_ALLOW_LIST)

2.Smarty模版引擎

smarty模板{}标记有冲突

{}与css或js有冲突解决:

① 在{}与内容中间设置空格

② 使得{}左右标记换行

③ 设置{literal}{/literal}

④ 变换smarty的标记符号

<b>ThinkPHP框架中的模型</b>

①使用D函数:在自定义模型AdviceModel中,使用$trueTableName指定真实表名

②在控制器中实例化Advice模型,关联advice表

object(Admin\Model\AdviceModel)是视线里Advice模型

SHOW COLUMNS FROM 'admin'是关联advice表

③使用M函数:

M函数第二个参数可以设置表前缀,null表示没有前缀,也可以直接指定前缀

<b>数据的查询操作</b>

1、两种查询方法select和find

Select方法,查询多条数据,返回值成功时是一个二维数组,失败时false

①实例模型,调用查询的方法$model -> select(),查看数据表中的所有数据

②$model -> select(1),可以传递参数,参数是数据表中的一个主键值

查询结果是一个二维数组,但是只有对应的一条数据

③$model -> select('2,3,4'),可以传递一个字符串参数,参数是多个主键值以英文逗号连接,

查询结果,是二维数组,里面有对应着传递的主键值的多条数据

find方法

①$model -> find(),查询结果是一个一维数组,是数据表的第一条数据

②$model -> find(3),可以传递参数,参数是一个主键值,查询结果还是一个一维数组

2、六种辅助方法

Where方法:

$model -> where('id=1') -> select();

表达式条件

['id'=>['GT',1]]这是一种以php数组的方式使用where

表达式 含义

EQ 等于(=)

NEW 不等于(<>)

GT 大于(>)

EGT 大于等于(>=)

LT 小于(<)

ELT 小于等于(<=)

LIKE 模型查询

[NOT] BETWEEN (不在)区间查询

[NOT] IN (不在)IN查询

其他辅助方法:

$model -> field('id,name') -> select(); 指定要查询的字段 默认是查询所有字段 *

$model -> order('id desc,goods_price desc') -> select(); 按照条件进行排序 desc倒叙 asc升序

$model -> limit(3) -> select(); 

$model -> limit(0,3) -> select(); 

$model -> limit('0,3') -> select(); 限制查询条数

$model -> group('cate_id') -> select();  分组 ,对应与原生sql的group by

$model -> having('id>3') -> select();  查询条件

Having和where的区别:

Where 后面的字段必须是数据表中的字段,

Having 必须是结果中的字段, 是原生sql中select 后指定的字段名

在查询使用赋值方法,可以连在一起调用,叫做连贯操作。

辅助方法放在最终查询方法select之前

原理:中间的辅助方法 返回值是当前这个对象本身,所以可以继续调用该对象的其他方法。

4、统计查询

方法 说明

Count  统计数量,参数是要统计的字段名(可选)

Max 获取最大值,参数是要统计的字段名(必须)

Min 获取最小值,参数是要统计的字段名(必须)

Avg 获取平均值,参数是要统计的字段名(必须)

Sum 获取总分,参数是要统计的字段名(必须)

以上统计查询在原生sql中都是在select之后使用对应的mysql函数,TP中直接封装了这些方法,返回值为一个数字。这些方法都是最终的查询方法,和select一样放在最后执行。

5、连表查询

连表查询比如inner join 、 left join 等方式,在TP的模型中,也有对应的join方法

实例:

$adviceModel=D('Avice');//这是第一个表

$data=$adviceModel->alias('t1')->field('t1.*',t2.username)->join('left join tpshop_user t2 on t1.user_id=t2.id')->select();

参数中的连接方式left join 可以省略,默认是inner join .其中alias方法用来设置别名。

<b>模版在模版中的变量输出</b>

$this->assign(‘模板文件中的变量名称’,变量值),来作一个变量赋值操作。

在模板中需要做变量的输出:

{$变量名称}

2、模板分隔符

模板分隔符默认是一对大括号,可以通过配置来修改

'TMPL_L_DELIM'=>'{', :左分隔符

'TMPL_R_DELIM'=>'}', :右分隔符

3、默认值

{$变量|default="默认值"}//如果没去取到变量值,则使用默认值

4、内置标签之volist遍历数组

对于数组变量的输出,需要在模板中进行遍历操作:

TP提供了一个内置标签volist用来在模板中遍历数组:

<volist name=’users’ key=’k’ id=’user’ offset=’’ length=’’></volist>

Name:要遍历的数组名,没有$符号

Key:当前遍历的是第几个,从1开始计数,如果不设置,默认key=”i”

Id:当前遍历的元素

Offset:指定从第几个开始遍历,从0开始计数

Length:指定遍历多少个元素就结束。

注意:这几个元素的值必须有单、双引号

5、内置标签之foreach遍历数组

<foreach name=’users’ key=’k’ item=’user’></foreach>

Name:要遍历的数组名

Key:当前遍历的元素的索引,从0开始计数

Item:当前遍历的元素

6、内置标签之if判断

<if condition=’’>

处理语句...

<elseif condition=’’/>

...

<else/>

...

</if>

提示:condition 属性值结束时,第二个引号之前保留一个空格。以免有的时候会发生错误。

7、使用函数

在模板中对输出的变量可以使用函数做处理:

{$变量名称|fn1|fn2=arg1,arg2,###}

{:函数名称(参数)}如果是数组请用['变量名']来获取

8、系统变量

$Think.server :相当于$_SERVER[‘’]

$Think.get :相当于$_GET[‘’]

$Think.post :相当于$_POST[‘’]

$Think.request :相当于$_REQUEST[‘’]

$Think.cookie :$_COOKIE[‘’]

$Think.session :$_SESSION[‘’]

$Think.config :$Think.config.参数形式调用config.php中的内容

扩展:在TP框架中,自定义了一个C函数,用来读取或者设置配置项。

9、使用运算符

运算符可以直接在模板文件中输出变量时使用。

+ {$a+$b}

-  {$a-$b}

*  {$a*$b}

/  {$a/$b}

% {$a%$b}

++ {$a++}

--  {$a--}

<b>数据的添加操作</b>

1、数组方式添加

数组方式

$model -> add(一维数组);

返回值,成功时是添加成功的主键id值,失败是false

$model -> addAll(二维数组);批量的添加操作

返回值,成功时是添加成功的主键id值之一,失败是false

2、AR(Active Record)方式添加

AR模式的核心:

① 表映射到类(一个数据表对应一个模型类)

② 字段映射到属性(数据表中的每个字段都是模型类对象的一个属性)

③ 记录映射到对象(一个对象就是一条记录)

就是把利用模型给数据表的字段赋值,来进行添加

大写的I是来接收post获取get传过来的值

实例

$data=I('post.')或者是I('get.')把从传递过来的数据赋值给一个变量

TP中的添加成功或者是失败函数

第一个参数是提示信息,第二个是跳转地址,第三个是跳转时间

$this->success('添加成功',U('Admin/Goods/index'),3)//表示添加成功

第一个参数是提示信息,第二个是跳转地址,第三个是跳转时间

$this->error("添加失败")

<b>功能</b>

1.系统常量

IS_GET 判断是否是GET方式提交

IS_POST 判断是否是POST方式提交

IS_AJAX 判断是否是AJAX提交

2、数据接收I()方法

I('变量类型.变量名',['默认值'],['过滤方法或正则'])

I(‘post.goods_name’,’test goods’,’htmlspecialchars’)

I(‘post.goods_name’)  相当于 $_POST[‘goods_name’]

I(‘post.’) 相当于 $_POST

Htmlspecialchars函数:把输入的符号转为表达式

3、页面跳转与重定向

$this->success(‘提示信息’,’跳转地址’,’等待时间’);

等待时间默认是1秒。

$this->error(‘提示信息’,’跳转地址’,’等待时间’);

跳转地址:默认返回上一个页面

等待时间默认是3秒

$this->redirect(‘跳转地址’,’url参数’,’等待时间’,’提示信息’);

跳转地址:直接传递 分组名/控制器名/方法名。这个方法内部会自己使用U函数生成url。

<b>修改操作</b>

1、数组方式

$model -> save(数组); //数组里面必须要包含主键id  TP框架中不允许没有条件的修改

$model -> where(条件) -> save(数组) //使用连贯操作在where中声明条件

返回值 成功时是受影响的数据条数,失败false

2、AR方式

$model -> 字段  =  值;

….

$model -> save(); //如果上面的属性对里面包含了主键字段,则这里不需要写条件

$model -> where() -> save() //如果上面的属性对里没有包含主键字段,则需要使用where辅助方法

<b>数据的删除操作</b>

1、真假删除

删除要达到的效果是在页面不显示数据。

物理删除:真删除

直接从数据表删除数据


逻辑删除:假删除(本质是修改操作)

并不是直接从数据表删除数据,给数据表添加一个状态字段is_show,

 0表示不显示 1表示显示

在列表查询数据时可以添加一个where条件,只获取is_show=1的数据

这时删除操作要做的,就是修改is_show这个字段的值为0

<b>对公共的模版跳转设置</b>

由于 我们把侧边栏的代码提取到了一个公共的文件,这个文件是整个后台所有模板共用的,在修改侧边栏中每一个超链接时,不能直接使用__CONTROLLER__这个字符串,需要从分组开始,使用__MODULE__字符串,然后在后面追加上控制器名称和方法名称

</pre>

</body>

</html>


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 我们安装了ThinkPHP之后,那么如何ThinkPHP开发项目呢?本篇文章就介绍了如何使ThinkPHP开发。
    下面由thinkphp框架教程栏目给大家介绍thinkphp 6.0 swoole扩展websocket使教程(think-swoole),希望对需要朋友有所帮助!
    下面由thinkphp框架教程栏目给大家介绍thinkphp行为如何使,希望对需要朋友有所帮助!
    下面由thinkphp教程栏目给大家介绍thinkphp lock锁使和例子,希望对需要朋友有所帮助!
    下面由thinkphp框架教程栏目给大家介绍thinkphp使mqtt,希望对需要朋友有所帮助!
    Highcharts是基于jquery开发国外图标插件;统计图,折线图,饼状图等常常到;本文将简单介绍如何在thinkphp使该插件。
    下面由thinkphp​框架教程栏目给大家介绍thinkphp控制器定义和使,希望对需要朋友有所帮助!
    下面由thinkphp框架​教程栏目给大家介绍使ThinkPHP5中thinkphp-queue方法,希望对需要朋友有所帮助!
    下面由thinkphp​教程栏目给大家介绍一个Thinkphp Hook行为使案例,希望对需要朋友有所帮助!
    本文介绍使Container类实现ThinkPHP核心框架。
    在上期聊了ThinkPHP自动加载,如你还不太了解可以跟这下文链接去进行查看。本文会带你一起解读ThinkPHP配置文件。
    thinkphp框架使方法:1、在官网上下载框架;2、解压并粘贴到新建立项目下;3、运行对应路径下index.php文件;4、如果可以成功运行,那么就可以继续按照需求进行开发。
    介绍一个好ThinkPHP Repository包:think-repository 是为 thinkphp 6.0.* 提供存储库于抽象数据层,使我们程序更灵活地进行维护。
    下面由thinkphp框架教程栏目给大家介绍thinkPHP使migrate实现数据库迁移方法,希望对需要朋友有所帮助!
    下面由thinkphp教程栏目给大家介绍ThinkPHP join关联查询不使默认表前缀,希望对需要朋友有所帮助!
    在某些场景里,我们需要在命令行中调代码,本文将具体实例介绍ThinkPHP如何使命令行(cli) think调,希望可以帮助到大家,与大家一起学习。
    PHPCMS不是ThinkPHP开发,可通过对比PHPCMS和ThinkPHP源码,可以看出并没有使ThinkPHP框架,并且PHPCMS官方并没有说明,该软件是基于ThinkPHP开发
    ​下面由thinkphp教程栏目给大家介绍thinkphp使AOP切面编程快速验证我们数据,希望对需要朋友有所帮助!
    下面由thinkphp框架教程栏目给大家介绍thinkphp中ajaxReturn法 ,希望对需要朋友有所帮助!
    下面由ThinkPHP教程栏目给大家介绍Thinkphp 6.0 认证插件 Think-authz,希望对需要朋友有所帮助!该扩展需要 PHP 7.1+ 和 ThinkPHP 6.0+...