ThinkPHP操作笔记(一)

来源:互联网 发布:新手编程 编辑:程序博客网 时间:2024/05/22 13:31

1.创建应用

应用程序首页 index.php 入口文件

<?php

//框架文件目录

define('THINK_PATH','./ThinkPHP/');

//项目名称

define('APP_NAME','Home');

//项目目录

define('APP_PATH','./Home/');

//开启调试模式

define('APP_DEBUG',true);

//包含框架文件

require(THINK_PATH.'ThinkPHP.php');

 

//经典写法

//require('/TP/ThinkPHP.php');

 

后台应用页面 admin.php

 

<?php

//框架文件目录

define('THINK_PATH','./ThinkPHP/');

//项目名称

define('APP_NAME','Admin');

//项目目录

define('APP_PATH','./Admin/');

//开启调试模式

define('APP_DEBUG',true);

//包含框架文件

require(THINK_PATH.'ThinkPHP.php');

 

//经典写法

//require('/TP/ThinkPHP.php');

 

 

2.文件结构

 

一级目录

Home 前台应用

 

Home 目录结构

 

 

3.函数和类库

系统函数库

common.php 全局加载,随时可以使用

functions.php 框架标准模式的函数库,其他模式可以加载自己的函数库

runtime.php 运行时文件,仅在调试模式和编译过程会被加载

 

项目函数库

common.php 在项目加载的时候运行,并且合并到项目编译统一缓存

 

扩展函数库

扩展函数库文件也放在公共目录里面

例如Common/user.php

文件内容

<?php

function userInfo(){

echo "userInfo".time();

}

 

控制器调用

public function index(){

load("@.user");

userInfo();

exit;

$this->display();

}

 

 

类库操作

 

import("Think.Util.Array");

import("ORG.Util.Array");

ThinkPHP的约定是ThinkORGCom包的导入作为基类库导入

 

 

import("MyApp.Action.UserAction");

import("MyApp.Model.InfoModel");

 

导入当前项目可以简化形式为

import("@.Action.UserAction");

import("@.Model.InfoModel");

 

不能导入带点号的文件 

import("ORG.User.Info");

翻译成

ORG/User/Info.class.php 

而不是

ORG/User.Info.class.php 

改成形式为

import("ORG.User#Info");

 

 

导入第三方类库

Vendor\Zend\Filter\Dir.php

导入形式

Vendor('Zend.Filter.Dir');

 

 

4.控制器操作

定义实例

http://localhost/App/index.php/User/add

 

UserAction.class.php

 

class UserAction extends Action{

public function add(){

 

 

}

 

}

 

空操作

 

空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

public function _empty($name){

echo $name;exit; //$name 为不存在的方法名称

}

 

空模块

空模块的概念是指当系统找不到指定的模块名称的时候,系统会尝试定位空模块(EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。

EmptyAction.class.php

 

EmptyAction.class.php

<?php

class EmptyAction extends Action{

public function index(){

echo '====='.MODULE_NAME.'====='.time(); //MODULE_NAME 当前请求的模块名称

exit;

}

}

 

URL伪静态配置

'URL_HTML_SUFFIX'=>'html'

支持多个格式形式

'URL_HTML_SUFFIX'=>'html|shmtl|xml' // 多个用 分割

 

URL生成

public function index(){

echo U("Add/user");

echo "<br />";

echo U("Add/user",array("a"=>1,"b"=>2));

exit;

$this->display();

}

 

URL大小写设置

'URL_CASE_INSENSITIVE' =>true

 

 

跨模块调用

A('[项目名://][分组名/]模块名')

A方法还支持跨分组或者跨项目调用,默认情况下是调用当前项目下面的模块

public function index(){

$pay = A("Pay");

$pay->pay();

$this->display();

}

R('[项目名://][分组名/]模块名/操作名',array('参数1','参数2'))

R方法还支持对调用的操作方法需要传入参数

 

public function index(){

 R("Pay/pay");

$this->display();

}

 

PayAction.class.php 文件内容

<?php

class PayAction extends Action{

public function pay(){

echo "PayAction".time();exit;

}

}

 

 

页面跳转

 

系统内置了两个跳转方法,sucesserror

$this->sucess('成功''User/list')

$this->error('失败');

 

重定向

$this->redirect('New/list',array('id'=>1),5,'页面跳转中...')

 

 

获取URL产生

$_GET['_URL_'] 获取从控制器开始的字符串 按照转换的数组

VAR_URL_PARAMS参数,默认值是:

'VAR_URL_PARAMS'      => '_URL_', // PATHINFO URL参数变量

 

public function index(){

print_r($_GET['_URL_']); //返回数据位 Array ( [0] => Index [1] => index [2] => 1 [3] => 2 [4] => 3 ) 

exit;

$this->display();

}

 

 

 

AJAX返回

默认是JSON格式返回

 

$this->ajaxReturn(返回数据,提示信息,操作状态);

实例

$this->ajaxReturn($result,"新增成功!",1); //$result 数组 字符串 整形 

 

 

Action绑定参数

 

调用地址 http://localhost/tp/index.php/Index/index/id/2/id2/3

控制器里面的方法

public function index($id,$id2){

echo $id.'=='.$id2;exit;  //输出结果 2==3

$this->display();

}

 

5.模型操作

 

如果没有创建模型文件使用M方法 如果创建了,使用D方法

 

D方法还可以支持跨项目和分组调用,需要使用:

//实例化Admin项目的User模型

D('Admin://User')

//实例化Admin分组的User模型

D('Admin/User')

 

$User = D("user");

$User = M("user");

 

 

实例化空模型类

如果打算使用原生态的SQL查询的话,可以实例化空模型类

$Model = new Model();

快捷方式

$Model = M();

 

$Model->query("select * from think_user");

 

 

ActiveRecord

1.创建数据

$User=M('user');

$User->name='name1';

$User->email='email1';

$User->add();

 

表单创建数据

 

如果使用了create方法创建数据对象的话,仍然可以在创建完成后进行赋值

$User=D("User");

$User->create();//创建User数据对象,默认通过表单提交的数据进行创建

//增加或者更改其中的属性

$User->status=1;

$User->create_time=time();

//把数据对象添加到数据库

$User->add();

 

2.查询数据

$User = M("User"); // 实例化User对象

// 查找id8的用户数据

$User->where('id=8')->find();

 

select() //方法

 

3.更新数据

$User->id = 1;

$User->name = 'name2';

$User->save();

 

4.删除数据

$User->delete('1,2');

 

 

自动验证

protected $_validate = array(

    array('verify','require','验证码必须!'), //默认情况下用正则进行验证

    array('name','','帐号名称已经存在!',0,'unique',1), // 在新增的时候验证name字段是否唯一

    array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内

    array('repassword','password','确认密码不正确',0,'confirm'), // 验证确认密码是否和密码一致

    array('password','checkPwd','密码格式不正确',0,'function'), // 自定义函数验证密码格式

);

 

 

自动完成

protected $_auto = array ( 

    array('status','1'),  // 新增的时候把status字段设置为1

    array('password','md5',1,'function') , // password字段在新增的时候使md5函数处理

    array('name','getName',1,'callback'), // name字段在新增的时候回调getName方法

    array('create_time','time',2,'function'), // create_time字段在更新的时候写入当前时间戳

);

 

查询语句 *******

 

 

 

6.视图操作

 

保存位置

 

Tpl目录下面 

例如User模块

实例

Tpl/User/add.html

Tpl/User/list.html

 

模板赋值

$this->assign('key','value');

或者

$this->assign(array('a'=>1,'b'=>2));

 

模板输出

 

display('模块名:操作名')

display('主题名:模块名:操作名')

 

直接输出内容

$this->show($content);

 

模板替换

 

__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/

__ROOT__: 会替换成当前网站的地址(不含域名) 

__APP__: 会替换成当前项目的URL地址 (不含域名)

__URL__: 会替换成当前模块的URL地址(不含域名)

__ACTION__:会替换成当前操作的URL地址 (不含域名)

__SELF__: 会替换成当前的页面URL

 

 

添加自己的字符串替换规则

只需要在项目的配置文件中

'TMPL_PARSE_STRING'=>array(

    '__JS__'=>'/Public/Js/',

    '__CSS__'=>'/Public/Css/'

),

 

获取模板内容

$content = $this->fetch('模板文件名称')

 

 

7.模板引擎

 

变量在模板里面的输出

$this->assign("name","name1");

 

index.html

{$name}

 

定界符修改

'TMPL_L_DELIM'=>'<{',

'TMPL_R_DELIM'=>'}>',

 

 

系统变量的使用

get

<{$Think.get.id}>

post

<{$Think.post.name}>

cookie

<{$Think.cookie.name}>

 

具体实例

 

$Think.server 获取$_SERVER {$Think.server.php_self} 

$Think.get 获取$_GET {$Think.get.id} 

$Think.post 获取$_POST {$Think.post.name} 

$Think.request 获取$_REQUEST {$Think.request.user_id} 

$Think.cookie 获取$_COOKIE {$Think.cookie.username} 

$Think.session 获取$_SESSION {$Think.session.user_id} 

$Think.config 获取系统配置参数 {$Think.config.app_status} 

$Think.lang 获取系统语言变量 {$Think.lang.user_type} 

$Think.const 获取系统常量 {$Think.const.app_name}{$Think.APP_NAME} 

$Think.env 获取环境变量 {$Think.env.HOSTNAME} 

$Think.version 获取框架版本号 {$Think.version} 

$Think.now 获取当前时间 {$Think.now} 

$Think.template 获取当前模板 {$Think.template} 

$Think.ldelim 获取模板左界定符 {$Think.ldelim} 

$Think.rdelim 获取模板右界定符 {$Think.rdelim} 

 

 

可以相互转换的形式

get post cookie session server

<{$Think.cookie.name}><br />

<{$_COOKIE.name}>

 

输出项目的配置参数

{$Think.config.db_charset}

 

函数的使用

{$varname|function1|function2=arg1,arg2,### }

###表示模板变量本身的参数位置 

支持多个函数,函数之间支持空格 

 

实例

{$webTitle|md5|strtoupper|substr=0,3}

 

{$create_time|date="Y-m-d",###}

 

默认值输出

{$Think.post.name|default="名称为空"}

 

可以使用运算符

+”“ ” “*” “/”和“%

 

 

文件包含

<include file="header" /> 包含当前模块下面的header.html模板

 

<include file="Public:header"> 包含Public模块下面的header.html模板

 

<include file="主题名:模块名:操作名" />

 

<include file="$变量名" />

 

<include file="header" title="ThinkPHP框架"keywords="开源WEB开发框架"/>

header文件里面可以这样使用

[title] [keywords]

 

文件导入

形式1 import

<import type='css' file="Css.common" /> 默认typejs

效果

<link rel="stylesheet" type="text/css" href="/Public/Css/common.css" />

 

形式2 load

<load href="__PUBLIC__/Js/Common.js" />

<load href="__PUBLIC__/Css/common.css" />

 

 

循环标签的使用

Volist标签

 

<volist name="list" id="vo">

{$vo.id}

{$vo.name}

</volist>

 

Foreach标签

 

<foreach name="list" item="vo">

{$vo.id}

{$vo.name}

</foreach>

 

 

比较标签

 

三元运算

 

范围判断标签

 

Empty标签

 

 

IF标签

 

控制器内容

public function index(){

$this->assign("value",11);

$this->display();

}

模板内容

<if condition=' $value gt 10 '>

大于10

<elseif condition=' $value eq 10' />

等于10

<else />

小于10

</if>

 

8.日志操作

 

EMERG 严重错误,导致系统崩溃无法使用 

ALERT 警戒性错误, 必须被立即修改的错误 

CRIT 临界值错误, 超过临界值的错误 

ERR 一般性错误 

WARN 警告性错误, 需要发出警告的错误 

NOTICE 通知,程序可以运行但是还不够完美的错误 

INFO 信息,程序输出信息 

DEBUG 调试,用于调试信息 

SQL SQL语句,该级别只在调试模式开启时有效 

 

'LOG_RECORD' => true, // 开启日志记录

'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

 

记录方式 默认为文件方式记录 

 

手动记录

Log::write($message,$level=self::ERR,$type='',$destination='',$extra='')

 

 

Log::record方法必须结合Log::save方法才能完成日志记录,因为record方法只是把日志信息保存到内存,并没有真正写入日志,直到调用Log::save方法。

 

Log::record('测试调试错误信息', Log::DEBUG);

Log::record('调试的SQL'.$SQL, Log::SQL);

Log::save();

 

 

0 0
原创粉丝点击