您的位置:首页 > 编程语言 > PHP开发

TP常用知识

2018-02-28 11:02 113 查看

1. 结构




2. 部署

2.1. 跳转过程

1.当输入网址时 配置host文件 进行跳转
2.vhost文件导入到www下的项目文件夹
3.Apache对文件夹进行解析

2.2. 站点配置

将文件夹ThinkPHP与index.php放到项目文件夹下

2.3. 设置url

1.url组成
域名www.tp.com/入口文件index.php/模块home/控制器index/方法index
2.url设置
在ThinkPHP/conf的convention.php中,可以设置默认模块/默认控制器/默认方法 从而可以省略。

3. 控制器

3.1.命名规范

采用大写驼峰式 IndexController.php

3.2.书写步骤

<?php
// 第一步:声明命名空间
namespace Home\Controller;
// 第二步:使用父类控制器
use Think\Controller;
// 第三步:定义自己的控制器并继承父类
class UserController extends Controller{
// 第四步:函数部分
public function aaa(){
echo 'aaaa';
}
}

3.3. functions.php

函数A实例化一个对象
函数R实例化一个对象,且调用了方法
函数U根据当前的URL设置生成对应的URL地址 U('方法名')
$this->success(‘提示信息’,‘跳转的路径’)
$this->error(‘提示信息’,‘跳转的路径’)
$this->redirect(‘跳转的路径’,’传递的参数’,’时间’,’提示信息’);

3.4. 4.辅助sql函数

where
$res=$model->where('typeid=3 and pname="海尔电视"')->select();

limit
$res=$model->limit('5,3')->select();

field
$res=$model->field('panme,price,pcount')->page('3,3')->select();

order
$res=$model->order('price desc')->select();

group
$res=$model->
->field('pname,count(*) as 数量,sum(price) as 总价')
->group('pname')
->selct();

count
$res=$model->count();

max
$res=$model->max('price');

min
$res=$model->min('price');

avg
$res=$model->avg('price');

sum
$res=$model->sum('price');

query
$res=$model->query('select * from tablename');

execute
可以用去增删改:$res=$model->execute("insert into tablename(id,name,price,count) values('1','大众',1000,2)");

4. 路由

4.1. 传统路由

http://www.php.com/index.php/?m=模块&c=控制器&a=操作方法
在ThinkPHP/conf/convention.php设置进行更改m|c|a|

4.2. 模式pathinfo

http://www.php.com/index.php/模块/控制器/操作方法
在application/conf/conf.php下面设置‘URL_PHTHINFO_DEPR’ => ’-’,可以进行修改斜线间隔符

4.3. 模式rewrite

1.在apache/httpd.conf中开启重启模式
2.在vhost中授权所有的访问
3.htaccess文件放到项目下面
4.重启运行 成功隐藏index.php
5.此目的为隐藏index.php

4.4. 兼容模式

兼容的样式:http://www.php.com/index.php/?s=模块/控制器/操作方法
设置前面得字母:‘VAR_PATHINFO’ => ‘s’,
选择url的模式:application/conf/config.php中'URL_MODEL'=>1
pathinfo为1 rewrite为2 兼容模式为3
(传统与pathinfo的联合)

5. 配置

5.1. 分级配置

核心配置文件
ThinkPHP/conf/convention.php
公共配置文件
Application/common/conf/config.php
模块配置文件
Application/Home/Conf/config.php
优先级
1.核心 2.公共 3.模块

5.2. 配置读取

1.ThinkPHP/common/functions.php中的C函数进行读取
C('DEFAULT_M_LAYER')进行读取出来
C(‘配置参数’,’配置的值’);
2.省略模块与方法
在公共配置文件application/conf/config.php
写法
‘url_route_rules’=>array(
     ‘showuser’=>’Home/user/showuser’,
)//对应省略了模块与控制器

6. 视图

6.1. 说明

view/视图文件夹与控制器的名字是一样的 控制器名对应文件夹名
在视图文件夹下面可以新建对应控制器的html文件
Html文件的名字对应控制器下面方法的名字

6.2. 显示要求

1.显示本方法对应的本页面
$this->display();
2.显示本控制器下其他方法的页面
$this->display(‘login’);
3.显示其他控制器下的方法对应的页面
$this->display(‘user/showusers’);
4.显示其他模块的控制器下的方法对应的页面
$this->display(‘Home@user:showuser’);

6.3. 模板变量

1.定义
$name='';
2.分配
$this->assign('name',$name);
3.引用
{$name}

6.4. 定界符

左定界符
'TMPL_L_DELIM'=>'<{';
右定界符
'TMPL_R_DELIM'=>'}>';

6.5. 替换机制

ü __MODULE__:替换当前模块的url地址(不含域名)
ü __CONTROLLER__:替换当前控制器的url地址(不含域名)
ü __ACTION__:替换当前操作方法的url地址(不含域名)
ü _SELF__:替换当前网页url地址(不含域名)
ü __PUBLIC__:替换当前公共目录地址(不含域名)

6.6. 函数

显示display
解析显源码fetch
抓取网页源码show
解析网页源码
变量
一维数组
索引数组
中括号
<{$arr[0]}>
点方式
<{$arr.0}>
关联数组
中括号
<{$arr[k]}>
点方式
<{$arr.k}>
二维数组
索引数组
中括号
<{$arr[0][0]}>
点方式
<{$arr.0.0}>
关联数组
中括号
<{$arr[k][k]}>
点方式
<{$arr.k.k}>
表示对象
方式一$gd->pid
方式二$gd:pid

6.6.1. 常量

ü $Think.server 相当于php当中的$_SERVER[]
ü $Think.post 相当于php当中的$_POST[]
ü $Think.get 相当于php当中的$_GET[]
ü $Think.request 相当于php当中的$_REQUEST[]
ü $Think.cookie 相当于php当中的$_COOKIE[]
ü $Think.session 相当于php当中的$_SESSION[]
ü $Think.config :得到系统的配置的值
ü $Think.const :得到系统常量的值

6.6.2. 模板变量

ü 时间
<{$time|date=('Y-m-d H:i:s'),###}>
ü 密码
<{$password|md5=###}>
ü 截取
<{$str|substr=###,0,7}>
ü 说明
如果只有一个参数,则###可以省略
多个参数时,第一个为###,可以省略

6.6.3. 默认值

<{$name|default='张三丰'}>

6.6.4. 运算符

+-*/%++--

6.6.5. 判断if

<if condition="$score egt 90">
           优秀
<elseif condition="$score egt 80" />
           良好
<else/>
            不及格
</if>

6.6.6. 遍历循环

foreach
一维数组
foreach($arr as $key=>$val){
       语句;
    }
二维数组
//name数组的名字 item数组的值 key数组的下标
<foreach name='arr' item='val'>
<{$val.name}><br>
<{$val.from}><br>
<{$val.age}><br>
</foreach>
volist
一维数组
<volist name='arr' id='val' key='k'>
              <{$k}=><{$val}>
</volist>
二维数组
//name数组的名字 id数组的值 key数组的下标
<volist name='arr' id='val'>
    <{$val.name}><br>
  <{$val.from}><br>
   <{$val.age}><br>
</volist>

6.6.7. 标签php

传统模式
<?php
echo '姓名是:'.$name.'<br>';
?>
TP模式
<php>echo '姓名是:'.$name<php>

6.6.8. .引用静态文件

传统方式:
<link rel="stylesheet" type="text/css" href="Public/css/style.css">
常量方式:
<link rel="stylesheet" type="text/css" href="__PUBLIC__/css/style.css">
TP方式:
<import type="css" file='css.style'>,
第一个元素为文件夹名字
第二个元素为被引用文件的名字

6.6.9. 不同控制器的方法

<a href='<{:U("manager/showlogin")}>'>新闻</a>

6.6.10. include

<include file='include/header' />
注解:引用的是include文件夹下的header.html

6.6.11. block

<block name='title'><title>标题</title></block>
<extend name='tpl/base'  />
总结:block表示可以被修改的
extend把文件进行继承

7. 模型

7.1. 连接数据库

使用PDO底层在ThinkPHP/thinkphp_3.2.3_full/library/Think/DbDriver.class.php

7.2. 配置文件位置

7.2.1. 方法1

Application/Common/Conf/config.php

7.2.2. 方法2

1.新建配置文件
/Application/Common/Conf/db.php
2.在db.php中加上连接数据库的配置
3.在confid.php中注明
'LOAD_EXT_CONFIG'=>'db',
4.运行即可

7.2.3. 后缀

'ACTION_SUFFIX'=>'Action'
在url访问的时候 可省略action不写

7.3. 定义

M(Model),它代表的就是数据 数据库的数据

7.4. 步骤

7.4.1. 创建模型文件

命名规则:GoodsModel.class.php

7.4.2. 定义模型类

<?php
//第一步:命名空间
namespace Amin\Model;
//第二部:引用父类
use Think\Model;
//第三部:定义自己的模型
class  GoodsModel extends Model{
}
?>

7.4.3. 控制器调用模型

<?php
//第一步:命名空间
namespace Amdin\Controller;
//第二部:引用父类
use Think\Controller;
//第三部:定义控制器
class Goods Model extends Controller{
    //第四步:调用admin里模型的方法
    function showlist(){
     $model=new \Admin\Model\GoodsModel();
dump($model);
    }
}
?>

7.4.4. 访问URL

www.php.com/index.php/Amin/goods/showlist

7.5. 控制器中实例化模型

$model=new \Admin\Model\GoodsModel();
$model=M('Goodsinfo');针对的是Goodsinfo的父类进行实例化
$model=D('Goodsinfo');针对的是Goodsinfo模型进行实例化
M实例化父类的模型
D首先实例化自己 如不存在,则实例化父类

7.6. CURD

7.6.1. Creat

$model=D('Goodsinfo');
$data=array(
   'typeid'=>'5',
   'pname'=>'天猫'
);
$res=$model->add($data);

7.6.2. Update

$model=D('Goodsinfo');
$data=array(
   'typeid'=>'5',
   'pname'=>'天猫'
);
$res=$model->save($data);

7.6.3. Read

查询所有:$res=$model->select();
查询一条:$res=$model->select(‘11’);
查询多条:$res=$model->select('11,12,13');
查询一条:$res=$model->find(11);
select 返回二维数组
find返回一维数组

7.6.4. Delete

$model=D('Goodsinfo');
$res=$model->delete('15,16,19');

7.7. 请求数据

7.7.1. 第一种方式

$_GET,$_POST
$_GET['username'];

7.7.2. 第二种方式

I(参数)
I('get.username');

7.7.3. xss

'DEFAULT_FILTER'=>'htmlspecialchars',

7.8. 判断为空

7.8.1. 第一种方式

empty(),isset()

7.8.2. 第二种方式

IS_POST,IS_GET

7.9. AR模式

7.9.1. Active Record

模式 即对象关系映射(ORM) 

7.9.2. AR类→数据表

AR属性→表字段AR实例→表记录

7.9.3. 增删改查

数据添加
$model->typeid=1;
$model->price=100;
$res=$model->add();
数据修改
$model->typeid=1;
$model->price=100;
$res=$model->save();
$model->find(13);
$model->typeid=1;
$model->price=100;
$res=$model->save();
数据查看
$res=$model->select();
数据删除
$model->find(13);
$res=$model->delete();

7.9.4. 字段映射

一一对应
protected $_map=array(
      ''=>''
);
create进行收集数据
$data=$model->create()

7.9.5. 自动验证

protected $_validate=array(
  array('typeid','require','不能为空'),
  array('pname','require','不能为空')
);
当is_post的时候进行验证

7.9.6. 自动完成

相当于默认的值
protected $_validate=array(
  array('typeid','5'),
  array('pname','张迪')
);

8. 调试

8.1. 跟踪信息

Application/common/conf/config.php
'SHOW_PAGE_TRACE' => true,

8.2. 调试模式

在index.php进行设置define('APP_DEBUG',True);
开发模式:更详尽
生产模式:更简单

8.3. SQL调试

$model->getlastsql();

8.4. 性能调试

memory_get_usage();
G函数
1.设立锚点
G('start');
G('stop');
2.输出
G(‘开始’,’结束’,’数字或者是字母m’);
数字:显示时间 数字表示的几位小数
m:内存使用情况 单位KB

8.5. 函数trace

trace($str,'str=');
'trace_page_tabs'=>array(
)
进行更换名称

8.6. 自定义
函数文件

函数文件

8.6.1. 系统公共函数

Application/Common/Common/function.php
在控制器中进行调用即可

8.6.2. 自定义函数

Application/Common/Common/下建立f1.php
在config.php文件中'LOAD_EXT_FILE'=>'f1',
在控制器中进行调用即可

8.6.3. 模块级别函数

Application/Admin/Common/下建立f2.php
进行调用load('@/f2');

9. 其他

9.1. 安全

9.1.1. sql注入

9.1.2. XSS

转义Html元字符,使用htmlentities、htmlspecialchars,strip_tags
XSS安全过滤的remove_xss方法
PDO数据连接

9.2. 验证码

function verify(){
$config=array(
'fontsize'=>25,
'imageH'=>80,
'imageW'=>80,
'length'=>4,
);
$vf=new \Think\Verify($config);
$vf->entry();
}

9.3. 验证判断

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: