Think.php
来源:原创
时间:2016-07-15
作者:脚本小站
分类:代码笔记
<?php //============================================================ //----------------------自动加载------------------------------ // 命名空间自动加载 /* 1.一般写法 */ new \dir1\dir2\test(); // 可以自动加载test.class.php文件,这个文件必须使用命名空间 /* 2.文件在 ThinkPHP/Library 这个目录下的可以自动识别和定位 */ new Think\Cache\Driver\File(); new Org\Util\Auth(); // 在Library目录下新增目录,就会自动注册新的根命名空间 /* 注册新的命名空间 详见:架构 > 自动加载 类库映射:加快命名空间效率 详见:架构 > 自动加载 */ /* 3.不符合命名规范和后缀的类库、没有使用命名空间或者命名空间 和路径不一致的类库 */ // 导入Org类库包 Library/Org/Util/Date.class.php类库 import("Org.Util.Date"); // 导入Home模块下面的 Application/Home/Util/UserUtil.class.php类库 import("Home.Util.UserUtil"); // 导入当前模块下面的类库 import("@.Util.Array"); // 导入Vendor类库包 Library/Vendor/Zend/Server.class.php import('Vendor.Zend.Server'); // 导入Library/Test/Test.class.php import('Test.Test'); /* 4.导入其他不规则的类库,不是以class.php结尾的等用Vendor()方法 */ // Library\Vendor\Zend\Filter\Dir.php Vendor('Zend.Filter.Dir'); //============================================================ //-------------------------自定义常量------------------------ // 在config中定义 必须在return之前定义 // 在入口文件中定义 //------------------------------------------------------------ //----------------------信息提示模板------------------------- // 默认错误跳转对应的模板文件 'TMPL_ACTION_ERROR' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件 'TMPL_ACTION_SUCCESS' => THINK_PATH.'Tpl/dispatch_jump.tpl', //============================================================ //---------------------自动生成模块-------------------------- // 在 index.php 文件中加入 // 自动生成模块 define('BIND_MODULE','h'); // 自动生成控制器 define('BUILD_CONTROLLER_LIST','Index,User,Menu'); // 使用后删除即可 //============================================================ //----------------------pc与手机端模板切换------------------- /* 在view目录中新建default与mobile文件夹, 将pc端的模板放入default中,手机端的放入mobile中 */ // 前台配置文件中 return array( 'DEFAULT_THEME' => 'default', // 'THEME_LIST' => 'default,mobile',//3.2之前好像要加 'TMPL_DETECT_THEME' => true, ); // 前台的主控制器中 if (ismobile()) {//这个函数判断是否为手机端 C('DEFAULT_THEME','mobile');// 设置默认默认主题为 Mobile } //========================项目分组设置======================= //------------------------------------------------------------ // 前台分组叫Home,后台分组叫Admin,目录结构一样 前台: namespace Home\Controller; use Think\Controller; 后台: namespace Admin\Controller; use Think\Controller; //========================跨控制器调用======================= //------------------------------------------------------------ // 如何在前台调用后台Admin\Common\Fun\hello.class.php类: // 1.hello.class.php的书写规则 namespace Admin\Common\Fun; class hello{} // 2.在前台调用后台hello类 $hello = new \Admin\Common\Fun\hello(); $hello->hehe(); // 后台调用前台同理 //------------------------------------------------------------ //-----------------------调用公共方法------------------------ // 调用app\Common\Fun目录下的类 $hello = new \Common\Fun\hello(); $hello->hehe(); // 在 手册>扩展>类库扩展 有说明 //------------------------------------------------------------ //------------------------快捷调用---------------------------- class GoodsController extends Controller{ function showlist(){ // 实例化User控制器与调用方法 $user = A('User');//通过快捷函数实例化控制器对象 echo $user->number(); } } //------------------------------------------------------------ //----------------------调用公共函数------------------------- // 在commom/common/function.php中放入函数 // 在前台或者后台可直接调用,如: hello(); //------------------------------------------------------------ //------------------------------------------------------------ A('User'); //跨控制器 A('Admin/User'); //跨模块 A('shop://Admin/User'); //跨项目 //------------------实例化控制器并调用方法------------------ //------------------------------------------------------------ //User为控制器 number为方法 R('User/number'); R('Admin/User/number'); R('shop://Admin/User/number'); // 同如下方法: $user = A('User'); echo $user->number(); //=======================Model设置============================ //------------------------------------------------------------ 一般情况下在Admin与Home平级的目录下新建一个Model文件夹 在此文件夹里面创建Model类文件 namespace Model; use Think\Model; class GoodsModel extends Model{ } //-------------------在控制器中调用Model类------------------- //------------------------------------------------------------ class GoodsController extends Controller{ function showlist(){ // 调用Model类 $goods = new \Model\GoodsModel(); var_dump($goods); } } /* 在使用外部数据表时表前缀与本地表前缀不同,此时需要使用 到真实的数据表名 */ class QqModel extends Model{ //定义当前模型操作真实的数据表 protected $trueTableName = 'tencent_qq'; 或者: //定义表前缀 protected $tablePrefix = 'tencent_'; } //======================实例化Model方法====================== //------------------------------------------------------------ // 方法一: class GoodsController extends Controller{ $goods = new \Home\Model\GoodsModel(); } // 方法二:(3.2版本以前的使用方法,同M()方法) class GoodsController extends Controller{ //此方法实例化父类Model类,但操作的还是原来Goods的数据表 $goods = D('Goods'); } // 方法三: class GoodsController extends Controller{ $goods = M('Goods'); } //============================================================ //------------------------------------------------------------ // 系统函数库 ThinkPHP/Common/functions.php /* R() 调用指定控制器下的指定方法 U() 制作url地址的快捷函数 C() 获得或设置配置变量 L() 获得语言变量信息 E() 给页面输出错误信息 A('模块/控制器') 实例化控制器对象 A('Home/User') 实例化User控制器对象 */ //============================================================ //=======================主入口文件配置====================== //创建项目目录(必须) define('APP_PATH','./app/'); //开启调试模式 define('APP_DEBUG',true); //引入ThinkPHP(必须) require('./ThinkPHP/ThinkPHP.php'); //===================访问方法路径书写方法==================== //------------------------------------------------------------ // localhost/Think/index.php/目录名/模块名/方法名 localhost/Think/index.php/home/index/index //=========================配置文件=========================== //------------------------------------------------------------ //系统默认配置文件(不修改) ThinkPHP/Conf/convention.php //开启debug模式时加载的配置文件 ThinkPHP/Conf/debug.php //关闭或开启右下角小图标 'SHOW_PAGE_TRACE' => false, C('SHOW_PAGE_TRACE',''); //=======================配置书写目录======================== //------------------------------------------------------------ app/Common/Conf/config.php 或者 app/Home/Conf/config.php // 前者作用范围大后者优先级高 // 写入以下内容 'SHOW_PAGE_TRACE' => true; //开启右下角的调试信息小图标 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'userhead', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 数据库表前缀 //------------------------------------------------------------ //----------------------通常写入内容------------------------- return array( //'配置项'=>'配置值' //url模式设置 //'URL_MODEL' => 0, 'URL_MODEL' => 1, //1为pathinfo模式 //让页面显示追踪日志信息 'SHOW_PAGE_TRACE' => true, //url地址大小写不敏感设置 'URL_CASE_INSENSITIVE' => true, ); //============================================================ //====================实例化一个数据库连接=================== /* 无论是M()方法还是D()方法都可以自动找表前缀,但之 前必须在配置文件中定义了表前缀,如表“test_user”我们 要在配置文件中先写'DB_PREFIX'=>'test_', 在使用方法时 只需要M('user')或D('user') */ $user = new \Think\Model('head'); $userlist = $user->select(); // dump()用于调试 dump($userlist); // M()实例化一个基类对象 $user = M('head'); // D()实例化一个对象(先去找自定义Model类,如userModel等类) $user = D('head'); //========================空操作处理========================= //------------------------------------------------------------ // 如:页面请求的地址为:xxx/xxx/user/hello,而hello方法不存在 //think内置的方法 public function _empty(){ echo '404'; } //利用__call方法(优先级高于_empty) public function __call($a,$b){ echo '访问的页面不存在'; } // 方法二: // 在对应的模板区建立一个与该空操作同名的模板 // 如:请求的方法为hello 那门对应的模板为hello.html //-----------------------空控制器处理------------------------ //------------------------------------------------------------ 处理空控制器文件 ThinkPHP/Library/Think/App.class.php 如:页面请求的地址为:xxx/xxx/User/hello,而User控制器不存在 // 方法一: 写一个 EmptyController.class.php 为名的控制器,在该控制器下 制作一个_empty() 方法即可 //============================================================ //=======================页面跳转============================= //跳转方法 $this->redirect('Index/index'); $this->redirect('控制器/方法名'); $this->redirect('Admin-Index/view', array('uid'=>1), 3,'页面跳转中~'); // 跳转到 其他OtherApp项目(非分组)的Admin项目分组User模块view操作 $this->redirect('OtherApp://Admin-User/view'); $this->redirect('http://www.chuxiangyi.com/'); $User = M('User'); //实例化User对象 $data['username'] = $_POST['username']; $data['password'] = $_POST['password']; $result = $User->add($data); if($result){ //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER'] // $this->success('操作完成','/Article/index',3); $this->success('新增成功', 'User/list'); } else { //错误页面的默认跳转页面是返回前一页,通常不需要设置 // $this->error('操作失败','/Article/error',5); $this->error('新增失败'); } //============================================================ //========================架构-URL模式======================== // rewrite模式 // 1.将以下内容写入.hataccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> // 2.在配置文件中开启 mod_rewrite.so模块 // 3.在配置文件中设置 AllowOverride 为 All(约255行) //======================U()自动产生URL地址=================== //------------------------------------------------------------ // U(模块/控制器/方法); // echo U(控制器/方法); echo U(Index/index); // PATHINFO模式下的URL /Think2/index.php/Home/Index/add.html http://localhost/web/shop/index.php/Home/user/login // 用C('URL_MODEL')方法输出路径模式 echo C('URL_MODEL'); // 在配置文件中设置 'URL_MODEL' => 2, // 设置后的模式为 rewrite /Think2/Home/Index/add.html // URL生成 U('User/add') // 生成User控制器的add操作的URL地址 U('Blog/read?id=1') // 生成Blog控制器的read操作 并且id为1的URL地址 U('Admin/User/select') // 生成Admin模块的User控制器的select操作的URL地址 // U方法的第二个参数支持数组和字符串两种定义方式, // 如果只是字符串方式的参数可以在第一个参数中定义 U('Blog/cate',array('cate_id'=>1,'status'=>1)) U('Blog/cate','cate_id=1&status=1') U('Blog/cate?cate_id=1&status=1') // 锚点支持 U('Blog/read#comment?id=1') //============================================================ //=====================自定义函数目录======================== // 自定义函数写在 /app/Common/Common/function.php //============================================================ //==================在某方法之前与之后执行=================== // public function _before_方法名(){} public function _before_hello(){ echo '_before_hello'; } public function _after_hello(){ echo '_after_hello'; } //------------------------------------------------------------ //-----------------------注册自动验证------------------------ // 自定义数据Model模型类实现具体的验证规则 // Step 1 // 模型文件中Model/UserModel.class.php namespace Home\Model; use Think\Model; class UserModel extends Model{ //一次性获得全部验证错误 protected $patchValidate = true; //实现表单项目验证 //通过重写父类属性_validate实现表单验证 protected $_validate = array( //验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间] // 账户 用户名 //验证用户名,require必须填写项目 array('username','require','用户名必须填写'), array('password','require','密码必须填写'), //可以为同一个项目设置多个验证 array('repassword','require','确认密码必须填写'), //与密码的值得是一致的 array('repassword','password','与密码的信息必须一致',0,'confirm'), // 其他 //邮箱验证 array('email','email','邮箱格式不正确'), //验证qq //都是数字的、长度5-10位、 首位不为0 //正则验证 /^[1-9]\d{4,9}$/ array('qq',"/^[1-9]\d{4,9}$/",'qq格式不正确'), //学历,必须选择一个,值在2,3,4,5范围内即可 array('xueli',"2,3,4,5",'必须选择一个学历',0,'in'), //爱好项目至少选择两项以上 //爱好的值是一个数组,判断其元素个数即可知道结果 //callback利用当前model里边的一个指定方法进行验证 array('hobby','check_hobby','爱好必须两项以上',1,'callback'), // 手机 array('phone','require','手机不可为空'), array('phone',"/^1[34578]{1}\d{9}$/",'手机格式错误',2), ); //自定义方法验证爱好信息 //$name参数是当前被验证项目的信息 //$name = $_POST['user_hobby'] function check_hobby($name){ if(count($name)<2){ return false; }else{ return true; } } } // Step 2 // 控制器文件中Controller/RegisterController.class.php namespace Home\Controller; use Think\Controller; class RegisterController extends Controller{ public function index(){ $this->display('Register/index'); } public function register(){ //实例化上面定义的UserModel类 // \Home\Model\UserModel() 使用绝对路径 $user = new \Home\Model\UserModel('user'); if($user->create()){ //create集成表单验证 echo '验证通过'; $user->atime = time(); $user->add(); }else{ // 如果错误输出不来用print_r(),getError为父类Model方法 dump($user->getError()); } } } //============================================================ //=======================控制器-伪静态======================= 'URL_HTML_SUFFIX'=>'shtml' //=========================模板============================== //======================指定显示模板========================= $this->display('User/add'); // View/user/add.html $this->display('模板文件夹/具体模板'); /* T函数作用: 生成模板文件名 返回值是一个完整的模板文件名 */ $this->display(T('Public/menu'));// 返回当前模块/View/Public/menu.html //-------------------------变量解析--------------------------- //------------------------------------------------------------ {$time|date='Y-m-d',###} // “|” 前后不可有空格 {:date('Y-m-d',$time)} //---------------------视图-模板引擎的切换------------------- //------------------------------------------------------------ 'TMPL_ENGINE_TYPE' =>'PHP' //---------------------模板中使用框架结构-------------------- //------------------------------------------------------------ // 模板中 <frameset cols="200px,*" frameborder="yes"> <frame src="__CONTROLLER__/left" noresize scrolling="yes" /> <frame src="__CONTROLLER__/right" name="right" /> </frameset> // 控制器中 class IndexController extends Controller { public function index(){ $this->display('Index/index'); } public function left(){ $this->display('index/left'); } public function right(){ $this->display('index/right'); } } //------------------------模板替换---------------------------- //------------------------------------------------------------ // 不含域名 __ROOT__ 指定到站点 /web/shop __APP__ 指定到应用 /web/shop/index.php __MODULE__ 指定到模型 /web/shop/index.php/home __CONTROLLER__ (__或者__URL__ 兼容考虑) 指定到控制器 /web/shop/index.php/home/user __ACTION__ 指定到方法 /web/shop/index.php/home/user/useradd __SELF__ 当前的页面URL /web/shop/index.php/Home/user/userAdd __PUBLIC__ 指定到公共目录 /web/shop/Public // 常量 php中使用 CONTROLLER_NAME //正在访问的控制器 ACTION_NAME //正在访问的方法 IS_CGI 是否属于 CGI模式 IS_WIN 是否属于Windows 环境 IS_CLI 是否属于命令行模式 __ROOT__ 网站根目录地址 __APP__ 当前项目(入口文件)地址 __GROUP__ 当前分组的URL地址 __URL__ 当前模块的URL地址 __ACTION__ 当前操作的URL地址 __SELF__ 当前URL地址 __INFO__ 当前的PATH_INFO字符串 __EXT__ 当前URL地址的扩展名 APP_NAME 当前项目名 GROUP_NAME 当前分组名 MODULE_NAME 当前模块名 ACTION_NAME 当前操作名 APP_DEBUG 是否开启调试模式 MODE_NAME 当前模式名称 APP_PATH 当前项目路径 THINK_PATH 系统框架路径 MEMORY_LIMIT_ON 系统内存统计支持 RUNTIME_FILE 项目编译缓存文件名 THEME_NAME 当前主题名称 THEME_PATH 当前模板主题路径 APP_TMPL_PATH 当前模板URL路径 LANG_SET 当前浏览器语言 MAGIC_QUOTES_GPC MAGIC_QUOTES_GPC NOW_TIME 当前请求时间(3.1新增) IS_GET 当前是否GET请求(3.1新增) IS_POST 当前是否POST请求(3.1新增) IS_PUT 当前是否PUT请求(3.1新增) IS_DELETE 当前是否DELETE请求(3.1新增) IS_AJAX 当前是否AJAX请求(3.1新增) //===========================内置标签======================== //----------------------用foreach显示数组-------------------- // 1.在控制器中分配变量 $user = M('user_head'); $list = $user->select(); $this->assign('list',$list); $this->display('Index/index'); // 2.在模板中显示变量 <foreach name="被分配的变量名" item="书写代号"> {$key}//这个$key变量可以输出0 1 2 3 4 5 {$书写代号.id}<br /> {$书写代号.name}<br /> </foreach> //----------------------用volist显示数组--------------------- //------------------------------------------------------------ <volist name="被分配的变量名" id="书写代号" offset="第几条开始显示" length='显示多少条'> {$书写代号.name} </volist> //============================================================ //----------------------增删改查通用语句--------------------- $model = M('demo'); $model ->execute();//insert update delete $model ->query();//select //========================插入数据============================ //------------------------create()---------------------------- /* create方法并不算是连贯操作,因为其返回值可能是布尔值, 所以必须要进行严格判断 */ // 方法一 // create()创建数据对象,可进行自动验证和过滤操作 // step1 $user = M('demo'); // step2 $data['name'] = 'Stephen'; $data['sex'] = '1'; $data['age'] = '22'; // step3 创建数据对象 $user->create($data); // 把用户对象写入数据库 $user->add(); // 方法二 $user = M('user'); //创建数据模型 $user->create(); //创建数据,接收post表单提交的数据 $user->atime = time(); //修改属性,向数据里添加内容或修改内容 $user->add(); //将创建好的数据添加到数据库 //------------------------------------------------------------ //------------------------data()------------------------------ // 用data()方法插入数据 data()不会进行自动验证和过滤操作 // step1 $user = M('demo'); // step2 $data['name'] = 'Anna'; $data['sex'] = '0'; $data['age'] = '12'; // step3 $user->data($data)->add(); //------------------------------------------------------------ //--------------------field()限制创建的字段------------------ $data['name'] = 'hello'; $data['sex'] = '1'; $data['age'] = '23'; $user = M('demo'); // 在create之前加入field()方法可限制创建的数据对象 $d = $user->field('name,sex')->create($data); dump($d); // 不查询某个字段,如text字段不查询 $user = field('text,content',true)->select(); // 只查询出field括号内的字段 $user->field('id,name,sex')->select(); //------------------------------------------------------------ //------------------------add()数据写入----------------------- $user = M('demo'); $data['name'] = 'xiaoming'; $data['sex'] = '1'; $data['age'] = '23'; // 使用add()方法将数据写入数据库 // 返回 Id $insertId = $user->add($data); //------------------------------------------------------------ //----------------filter(函数)字段内容过滤------------------- $data['name'] = '<b>thinkphp</b>'; $data['sex'] = '1'; $User = M('demo'); // 写入数据库的时候会把name字段的值转化为thinkphp。 $User->data($data)->filter('strip_tags')->add(); //------------------------------------------------------------ //------------------------addAll()批量添加数据--------------- // 批量添加数据 $dataList[] = array('name'=>'one','sex'=>'1'); $dataList[] = array('name'=>'two','sex'=>'0'); $User->addAll($dataList); //=======================数据读取============================= //-----------------------获取字段名--------------------------- $user = M('user'); $user->getDbFields(); //---------------------select()查询出数据集------------------* //------------------------------------------------------------ // 将所有数据查出,失败返回 false,无结果返回 null $user = M('demo'); $data = $user->select(); dump($data); // 加入条件 $user->field('name,sex')->where('id > 2')->order('age')->limit(3)->select(); //查询主键值为30的信息 $user->select('30'); // 查询主键为21,23,27的值 $user->select('21,23,27'); //----------------find()查询出一条数据数据-------------------* //------------------------------------------------------------ // 查询出一条数据 $user = M('demo'); // 失败返回false if($data = $user->find()){ dump($data); } // 加入where条件 $user = M('demo'); $data = $user->field('name,sex')->where('id > 2')->find(); dump($data); // 返回一维数组 $data->find('30'); $manager->where("username = '$username' and password = '$password'")->find(); //---------------getField()获取一列或一个数据---------------- //------------------------------------------------------------ // 获取列数据中的第一条 $user = M('demo'); $data = $user->getField('name');//默认第一个 // 第二个参数位true 则获取整列数据 $user->where("id = 3")->getField('name',true); // 限制显示条数 $nickname = $User->where('status=1')->getField('nickname',8); $nickname = $User->where('status=1')->limit(8)->getField('nickname',true); // 返回二维数组,键名为第一个 $nickname = $User->where('status=1')->getField('id,nickname,sex'); // 使用连接符':' 键名是id值,键值则是account:nickname连接组成的字符串 $result = $User->where('status=1')->getField('id,account,nickname',':'); //=========================数据更新========================== //-----------------------更新指定记录------------------------* $user = M('demo'); $data['name'] = 'one'; $data['sex'] = '1'; // 使用save $user->where('id=5')->save($data); //------------------------------------------------------------ //-------------------------更新整张表------------------------ $user = M('demo'); $data['name'] = 'one'; $data['sex'] = '1'; // 未加where条件 $user->save($data); //------------------------------------------------------------ //-----------------------setField()更新某个字段-------------- $user = M('demo'); $user->where('id=5')->setField('name','Stephen'); //更新多个字段 $User = M("User"); $data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com'); $User-> where('id=5')->setField($data); //-------------------------批量更新--------------------------- //------------------------------------------------------------ $id = isset($_GET['select'])? implode(',',$_GET['select']):$_GET['id']; $article->where("id in ({$id})")->setField('del',1); $article->where("id in ({$id})")->save(array('del'=>1)); //------------------------------------------------------------ //----------------------setInc()自加自减---------------------- $User = M("User"); // 实例化User对象 $User->where('id=5')->setInc('字段',3); // 用户的积分加3 $User->where('id=5')->setInc('字段'); // 用户的积分加1 $User->where('id=5')->setDec('字段',5); // 用户的积分减5 $User->where('id=5')->setDec('字段'); // 用户的积分减1 //=============================删除============================ //-------------------------删除单个数据----------------------- $user = M('demo'); $user->delete(3); $user->delete(1,2,3); $user->where('name=one')->delete(); //==========================模型============================== //----------------------查询出某个字段----------------------- $this->getByUsername($username);//getBy后面的Username为数据表的字段名 //==========================where特点========================= //------------------------------------------------------------ // 用数组作为查询条件 $User = M("User"); $map['name'] = 'thinkphp'; $map['sex'] = 'man'; $User->where($map)->select(); // 表达式查询 $map['字段1'] = array('表达式','查询条件1'); $map['id'] = array('in','12,13,23');//表达式不分大小写 $Model->where($map)->select(); // 下面是表达式 /* 表达式 含义 EQ 等于(=) NEQ 不等于(<>) GT 大于(>) EGT 大于等于(>=) LT 小于(<) ELT 小于等于(<=) LIKE 模糊查询 [NOT] BETWEEN (不在)区间查询 [NOT] IN (不在)IN 查询 EXP 表达式查询,SQL语法 */ // where可以多次调用 //===========================专题============================= //===========================分页============================= // 方法一 $user = M('demo'); // step1 $page = new \Think\Page($user->count(),2); // step2 $data = $user->limit($page->firstRow .','.$page->listRows)->select(); // step3 $this->assign('datalist',$data); //显示数据 $this->assign('page',$page->show()); //显示分页 // 方法二 $user = M('demo'); // 进行分页数据查询 注意page方法的参数的前面部分是当前的页数 // 使用 $_GET[p]获取 $list = $user->page($_GET['p'].',2')->select(); $this->assign('datalist',$list); $Page = new \Think\Page($user->count(),2); $show = $Page->show(); $this->assign('page',$show); //============================================================ //---------------------Ajax返回的数据形式-------------------- //返回格式有:JSON、JSONP、XML、EVAL // 返回JSON格式 $arr = array('name'=>'Stephen','age'=>'23'); $this->ajaxReturn($arr,'JSON');//返回json格式 {"name":"Stephen","age":"23"} // 返回普通数据 $this->ajaxReturn($arr,'EVAL'); //------------------------------------------------------------ //----------------------Ajax动态请求数据--------------------- // 模板中的书写方式 $(function (){ // {name:'jack',age:'23'}这样的方式传过去的其实是一个post数组 $.post('__MODULE__/Sort/check',{name:'jack',age:'23'},function (data){ alert(data.name); alert(data.age); },"json"); }); // 框架中的书写方式 public function check($name,$age){ $json = array('name'=>$name,'age'=>$age); $this->ajaxReturn($json,'JSON'); } //============================================================ //------------------------文件上传---------------------------- // 详见手册专题文件上传 $upload = new \Think\Upload(); $upload->maxSize = 3145728; $upload->exts = array('jpg', 'gif', 'png', 'jpeg'); $upload->rootPath = './Public'; $upload->savePath = '/uploads/'; $upload->autoSub = true; //是否开启子目录(日期目录)保存,默认开启 $info = $upload->upload(); if(!$info){ $this->error($upload->getError()); }else{ foreach ($info as $key => $value){ $savePath = $value['savepath']; $saveName = $value['savename']; } $picPath = $savePath.$saveName; } //============================================================ //------------------------图像处理---------------------------- // 详见手册专题图像处理 $image = new \Think\Image(); $image->open($upload->rootPath.$picPath); $image->thumb(400, 400)->save($upload->rootPath.$savePath.'logo_'.$saveName); //============================================================ //-------------------------验证码----------------------------- // 模板中写入 <img onClick="this.src=this.src+'?'+Math.random()" src="__MODULE__/login/checkCode" /> // 被调用的后台验证码方法 public function checkCode(){ $config = array( 'fontSize' => 30, 'length' => 3, 'useNoise' => false, // 关闭验证码杂点 ); $verify = new \Think\Verify($config); $verify->entry(); } // 检查验证码 $verify = new \Think\Verify(); if(!$verify->check($_POST['checkcode'])){ $this->error('验证码错误'); } //============================================================ //------------------------多表查询---------------------------- // 1、原生查询示例: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p->listRows; $voList = $Model->query($sql); // 2、join()方法示例: $user = new Model('user'); $list = $user->join('RIGHT JOIN user_profile ON user_stats.id = user_profile.typeid' ); M("user u")->join("{$per}user_info x ON x.uid = u.id")->where("u.id = $uid")->find(); // 3、table()方法示例: $list = $user->table('user1 a, user2 b')->where('a.id = b.id') ->field('name,sex')->order('id desc' )->select(); //============================================================ //------------------------模板中使用函数--------------------- {:htmlspecialchars_decode($data['data'])} //============================================================ //--------------------------路由------------------------------ // 开启路由 'URL_ROUTER_ON' => true, //定义路由规则 'URL_ROUTE_RULES' => array( 'index' =>array('index/index','',array('ext'=>'html')), 'p' =>array('product/index','',array('ext'=>'html')), 'plist' =>array('product/plist','',array('ext'=>'html')), 'slist' =>array('product/slist','',array('ext'=>'html')), 'details/:id\d' =>array('product/details','',array('ext'=>'html')), '/^alist\/(.*\d)_(.*\d)$/' =>array('article/alist?id=:1&p=:2','',array('ext'=>'html')), 'alist/:id\d' =>array('article/alist','',array('ext'=>'html')), 'article/:id\d' =>array('article/article','',array('ext'=>'html')), 'category' =>array('product/category','',array('ext'=>'html')), ), //============================================================ //---------------------------静态缓存------------------------- // 静态缓存 // 'HTML_PATH' 缓存目录,这是个常量不是配置项,在入口文件中定义 // 'HTML_CACHE_ON' => true, // 开启静态缓存 'HTML_CACHE_TIME' => 3600, // 全局静态缓存有效期(秒) 'HTML_FILE_SUFFIX' => '.html', // 设置静态缓存文件后缀 'HTML_CACHE_RULES' => array( // 定义静态缓存规则 // 定义整个文章控制器 'Article:' => 'Article/{:action}_{id}', // 对商品进行缓存 'Product:plist' => 'Product/plist_{id}_{pid}', // 对单个操作进行缓存 'Index:index' => 'Index/index', 'Product:category'=>array('Product/category',0), ), //------------------------------------------------------------ //---------------------数据缓存(通用缓存)-------------------- // 查询缓存,快速缓存 // 数据缓存 // 缓存的文件在 Runtime/Temp中 'DATA_CACHE_TYPE' => 'File', 'DATA_CACHE_PREFIX' => 'Kangku_', 'DATA_CACHE_TIME' => 600, //------------------------------------------------------------ //-----------------------快速缓存----------------------------- // 永久缓存 // 缓存数据 F('data',$Data); // 指定目录 默认DATA_PATH F('data',$Data,TEMP_PATH); // 删除缓存 F('data',NULL); //------------------------------------------------------------ //-----------------------查询缓存----------------------------- // 查询时缓存 // 只要加上cache(true)后第一次查询后就从缓存数据中取值,不用其他判断 // 1.默认缓存 $Model->cache(true)->where('status=1')->select(); // 2.给缓存取名,可用此名称读值 $Model->cache('cache_name')->select(); // 读值 $value = S('cache_name'); // 3.设置缓存方式与时间 $Model->cache(true,60,'file')->select(); //------------------------------------------------------------ //--------------------SQL解析缓存----------------------------- //开启缓存 'DB_SQL_BUILD_CACHE' => true, //缓存方式 'DB_SQL_BUILD_QUEUE' => 'file', // SQL缓存的队列长度 'DB_SQL_BUILD_LENGTH' => 20,