加强 thinkphp 学习

简介

alpha 版本

beta 版本

rc 版本 (候选版本)

r 版本 (正式版本)

路由

特别说明:路由形式的配置值,不影响我们在地址栏直接输入其他形式路由进行访问。该配置项直接影响的是tp系统封装的url组装函数(U函数)的生成url地址的形式。

分组

所谓分组,就是分功能块,前台归前台,后台归后台。

怎样创建分组,只要重新创建一个和 Home 结构一模一样的文件组。

模版常量

__ROOT__默认就是当前网址。无需设置。

模版内容获取

$this->fetch();
// display 方法就是通过 fetch 来实现的。

注释

thinkphp注释是原生注释加上大括号。效果是网页查看源码也不能看到该注释。

命名空间

引用一个类,只要在同一个命名空间下,即使没有 include等 也可以直接使用。

乱码

在入口文件即index文件中加上一句header。

模版输出对象的内容

{$obj->name}
// or
{$obj : name}

模版中直接获取超全局变量

{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
{$Think.session.user_id} // 输出$_SESSION['user_id']变量
{$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
{$Think.cookie.name}  // 输出$_COOKIE['name']变量
// 支持输出 $_SERVER、$_ENV、 $_POST、 $_GET、 $_REQUEST、$_SESSION和 $_COOKIE变量。

模版中函数使用

{$str|substr=0,5|strtoupper}
// ### 代表变量本身,如果变量本身的参数位置在第一个,或者,只有一个参数,可以省略 ### 。

模版中的默认值

{$str|default='nothing is here'}

模版 include 另一个模版如何传值

<include file='Public/footer' copyright='onegoal' />

<div> my copyright is [copyright] </div>

# M 方法和 D 方法的区别

D方法是实例化自定义模型,如果模型不存在,则实例化父类模型。M方法是直接实例化父类模型。
// 后期如果需要使用的操作在父类中已经封装好了就用M方法,否则请使用D方法,并在自定义模型中定制好自己的方法。

CURD

$table->addAll($arr);
$table->select();
$table->select(1);
$table->select(1,12,33);

$table->delete();   // 无法使用,没有条件不能使用
$table->delete(1);
$table->delete(1,12,33);

生产模式

生产模式下修改主配置文件,应用级别配置文件,系统函数库文件不会生效。因为通过跟踪页面信息的显示,在生产模式下这几个文件没有被加载。

获取最后一句sql

echo $model->getLastSql();
// 在3.2版本后,增加了一个它的别名
echo $model->_sql();

统计消耗

G('start');
for( $i=1;$i<100000;$i++ ){
    $i++;
}
G('stop');
echo G('start', 'stop', 4);
// 第三个参数是数字,统计消耗的时间,且小数4位。
// 第三个参数是m,统计内存消耗,需要服务器支持。

AR模式

AR模式(Active Record)是一个对象-关系映射模型(ORM)。每个AR类代表一张数据表,数据表的字段在AR类中体现类的属性,一个AR实例表示表中的一行。

类 ->  模型类 -> AR属性/字段 -> 操作结果/表记录
人类->  人    -> 衣服,帽子等 -> 劳动成果
// AR模式在tp中典型的应用,CURD操作
$model = M('Product'); // 实例化模型
$model -> 属性/表中字段 = 字段值; // 字段映射到值
$model -> CURD 操作; // 实例映射到表中的记录,CURD操作没有参数
// 增加操作
$model = M('Product'); // 实例化模型
$model -> price = 12; // 字段映射到值
$model -> date = 1452342343; // 字段映射到值
$model -> add(); 
// 更新操作
$model = M('Product');
$model -> id = 11; // 确定主键, 如果前面有select或者find操作,可以不用确定主键
$model -> price = 120; 
$model -> date = 1452342343; 
$model -> save();
// 删除
$model = M('Product'); 
$model -> id = '1,22'; // 可以是多个主键。  如果前面有select或者find操作,可以不用确定主键
$model -> delete();
// 辅助方法
$model = M('Product'); 
$model -> where( 'id > 12' ); 
$model -> field('id, name');
$model -> limit(2, 12);
$model -> select();
// 尽量使用连贯操作把上面代码写成一行。

fetchSql

即使在sql语法错误的情况下,依然能获取sql语句。

$model -> where() -> order() -> ... -> fetchSql( true ) -> CURD 操作;

create

当有很多属性的时候,一个一个的使用 $model -> price = 120;比较繁琐

这时候可以使用create。create在表单中字段和数据表中字段不匹配的时候,该字段数据对象会被过滤。

// 有自动验证一定要传递创建对象后的结果
$model = D('Dept');
$data = $model -> create();
if(!$data){
    echo $model->getError();
  // $this -> error($model->getError());
}

开启批量验证

protected $patchValidate = true;  // 返回的错误形式是一个数组

字段映射

<input name='ad'>
protected $_map = array('ad' => 'name');

在使用字段映射后,被映射的字段会被放到打印出来数组的最后,按照字段映射的先后顺序进行排列。

表名特殊(比如:没有前缀)

在模型中添加
protected $trueTableName = 'mytable';

session

session('?name'); // 判断存在,是true;否 false;
$allSession = session();
session(null); // 全部删除

cookies(null)有 bug

TP中只能使用绝对路径(尽量不用相对路径)来表示 js 和 css 中的路径。

文件引入

// config.php
'LOAD_EXT_FILE' => 'info, myfunction',

load('@/不带后缀的php文件名');
// 文件必须在分组级别的函数库目录中,只能用于定义的分组中。

联表查询

// 第一种:原生 sql
$model=M();
$sql='select t1.*,name as dpname from leon_user as t1,leon_product as t2 where t1.id = t2.uid';
$res=$model->query($sql);

// table()
$model=M();
$res=$model->field('t1.*,name as dpname')->table('leon_user as t1,leon_product as t2')->where('t1.id = t2.uid')->select();

// join()
$model=M('leon_user');
$res=$model->field('t1.*,name as dpname')->alias('t1')->join('left join leon_product as t2 on t1.id = t2.uid')->select();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值