thinkphp切换表前缀、语言
ThinkPHP教程_PHP框架之ThinkPHP(一)【入门和介绍、ThinkPHP版本。。。
ThinkPHP教程_PHP框架之ThinkPHP(⼀)【⼊门和介绍、ThinkPHP版本。
⼀、什么是框架 就是别⼈写好的⼀批类和⼀个规则注意,不仅仅是在学习中,更是在以后的⼯作中,在选择框架的时候,不要⼀味地追求"⼤"、"全",⽽是要根据当时项⽬的需要选择合适的框架 1、MVC模式 M Model 模型 就是数据库操作类(通过数据库操作类去操作各个表) V View 视图 模板 C Controller控制器 控制器来实现模板、模型之间的控制关系 控制器也是⼀个类,这个类中有不同的⽅法,所以控制器也叫模块(Module),其中的⽅法叫动作(Action)! 那么问题来了,视图是如何告知哪个控制器(模块)去执⾏哪⼀个⽅法(动作)呢?结果是URL ⽐如说在⼀个项⽬中有如下两个模块 ⽤户管理 (⽤户注册、⽤户修改、⽤户删除、⽤户编辑) 商品管理 (⽤户下单、修改订单、取消订单)⼆、ThinkPHP框架 1、具有⽐较好的跨平台性 ⽆论是服务器平台(Linux、Windows、Unix)还是服务器软件(Apache、IIS、Nginx),都能良好的⽀持 2、⽂件名⼤⼩写问题 Windows中的⽂件名是不区分⼤⼩写的,⽽Linux和Unix中的⽂件名是区分⼤⼩写的!那么就可能在平台移植过程中,出现⽂件找不到的情况,⽽ThinkPHP很好的解决了这个问题,只要在ThinkPHP中开启了APP_DEBUG,即调试模式,那么即使在Windows下开发,ThinkPHP就已经严格区分了⼤⼩,这就从源头上解决了平台移植⼤⼩写的问题! 3、URL⽀持多种模式 共有4种模式,⽅便SEO 4、⽀持⾃动加载、动态编译 节约系统开销 5、AJAX⽀持、视图、分组、权限管理、关联操作、主从数据库、缓存(apc、db、memcache、shmop、xcache、file) 6、⾃动验证、⾃动完成、映射 7、加载第三⽅类库三、ThinkPHP版本和⽂件夹规范 1、官⽹: 2、软件开发阶段 A alpha 内部测试 B beta 公开测试 C RC 开发倒计时(该阶段已经将重⼤和重要的BUG进⾏了修复,仅仅会有⼀些⼩的使⽤性上⾯的⼩bug) D final 正式发⾏版本 3、ThinkPHP版本 基础阶段学习的是2.1RC版(⽬前(2016-08-18)在官⽹上已经没有2.1RC版了,只有2.1正式版),所以使⽤的是2.1正式版 ThinkPHP有核⼼包和完整包之分,完全开发⼿册有PDF、swf、CHM版,还有ThinkPHP的API⼿册 核⼼包 仅仅包含ThinkPHP运⾏的最主要⽂件(不包含扩展类、⽰例、⽂档)(ThinkPHP_2.1_core.zip) 完整包 核⼼包的基础上增加了扩展类、⽰例、⽂档 ps,其实2.x版本的完整包是有带⽰例和⽂档完整包(ThinkPHP_2.1_full.zip)和带扩展、⽰例和⽂档完整包(ThinkPHP_2.1_full_with_extend.zip)之分的,但是在3.x以及5.x版本中,完整包就没有分两种了(统⼀叫ThinkPHP_3.1.3_full.zip) 注意,核⼼包仅仅只有⼀个ThinkPHP的核⼼⽬录,⽽且完整包和核⼼包的ThinkPHP⽬录也是不⼀样的!完整包的ThinkPHP⽬录中的Vender⽬录下是有很多扩展类的,⽽核⼼包的ThinkPHP⽬录中的Vender⽬录是空的;完整包的ThinkPHP⽬录中的Lib⽬录下是有⼀ORG⽬录的,⽽核⼼包是没有的! ⽂档下载 4、⽂件夹规范 ThinkPHP的⽂件夹规范分两⼤块,⼀个是系统⽬录结构、⼀个是项⽬⽬录结构 ·系统⽬录结构 #ThinkPHP.php⽂件:项⽬初始化时,单⼀⼊⼝⽂件必须引⼊的⼀个⽂件,因为系统⽬录必须通过这个⽂件查找 #Common⽬录:⼀些公⽤的函数,⽐如说D()、F()等等;其中的convention.php包含ThinkPHP中所有的配置⽂件需要⽤到的东西等等 #Lang⽬录:语⾔包,就是将ThinkPHP可能产⽣的⼀些错误和异常与对应的⽂字说明做⼀个映射。
ThinkPHP的常用配置选项汇总
本文实例讲述了ThinkPHP的常用配置选项。
分享给大家供大家参考,具体如下:return array( /* Dispatch设置*/ 'DISPATCH_ON' => true, // 是否启用Dispatcher // URL模式:0 普通模式 1 PA THINFO 2 REWRITE 3 兼容模式当DISPATCH_ON开启后有效 'URL_MODEL' => 1, // 默认为PATHINFO 模式,提供最好的用户体验和SEO 支持 // PATHINFO 模式 // 普通模式1 参数没有顺序/m/module/a/action/id/1 // 智能模式 2 自动识别模块和操作/module/action/id/1/ 或者/module,action,id,1/... // 兼容模式3 通过一个GET变量将PATHINFO传递给dispather,默认为s index.php?s=/module/action/id/1 'PATH_MODEL' => 2, // 默认采用智能模式 'PATH_DEPR' => '/', // PA THINFO参数之间分割号 'ROUTER_ON' => false, // 是否开启URL路由 'CHECK_FILE_CASE' => false, // 是否检查文件的大小写对Windows平台有效 'TAG_PLUGIN_ON' => false, // 是否开启插件机制 'SESSION_AUTO_START' => true, // 是否自动开启Session /* 日志设置*/ 'WEB_LOG_RECORD' => false, // 默认不记录日志 'LOG_RECORD_LEVEL' => array('EMERG','ALERT','CRIT','ERR'), // 允许记录的日志级别 'LOG_FILE_SIZE' => 2097152, // 日志文件大小限制 /* 错误设置*/ 'DEBUG_MODE' => false, // 调试模式默认关闭 'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~', // 错误显示信息非调试模式有效 'ERROR_PAGE' => '', // 错误定向页面 'SHOW_ERROR_MSG' => true, /* 系统变量设置*/ 'VAR_PATHINFO' => 's', // PATHINFO 兼容模式获取变量例如?s=/module/action/id/1 后面的参数取决于PATH_MODEL 和PATH_DEPR 'VAR_MODULE' => 'm', // 默认模块获取变量 'VAR_ACTION' => 'a', // 默认操作获取变量 'VAR_PAGE' => 'p', // 默认分页跳转变量 'VAR_TEMPLATE' => 't', // 默认模板切换变量 'VAR_LANGUAGE' => 'l', // 默认语言切换变量 'VAR_AJAX_SUBMIT' => 'ajax', // 默认的AJAX提交变量 /* 模块和操作设置*/ 'DEFAULT_MODULE' => 'Index', // 默认模块名称 'DEFAULT_ACTION' => 'index', // 默认操作名称 /* 模板设置*/ 'TMPL_CACHE_ON' => true, // 默认开启模板编译缓存false 的话每次都重新编译模板 'TMPL_CACHE_TIME' => -1, // 模板缓存有效期-1 永久单位为秒 'TMPL_SWITCH_ON' => true, // 启用多模版支持 'AUTO_DETECT_THEME' => false, // 自动侦测模板主题 'DEFAULT_TEMPLATE' => 'default', // 默认模板名称 'TEMPLATE_SUFFIX' => '.html', // 默认模板文件后缀 'CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀 'OUTPUT_CHARSET' => 'utf-8', // 默认输出编码 'TMPL_V AR_IDENTIFY' => 'array', // 模板变量识别留空自动判断array 数组obj 对象 /* 分页设置*/ 'PAGE_NUMBERS' => 5, // 分页显示页数 'LIST_NUMBERS' => 20, // 分页每页显示记录数 /* 模型设置*/ 'AUTO_NAME_IDENTIFY' => true, // 模型对应数据表名称智能识别UserType => user_type 'DEFAULT_MODEL_APP' => '@', // 默认模型类所在的项目名称@ 表示当前项目 /* 静态缓存设置*/ 'HTML_FILE_SUFFIX' => '.shtml', // 默认静态文件后缀 'HTML_CACHE_ON' => false, // 默认关闭静态缓存 'HTML_CACHE_TIME' => 60, // 静态缓存有效期 'HTML_READ_TYPE' => 1, // 静态缓存读取方式0 readfile 1 redirect 'HTML_URL_SUFFIX' => '', // 伪静态后缀设置 /* 语言时区设置*/ 'TIME_ZONE' => 'PRC', // 默认时区 'LANG_SWITCH_ON' => false, // 默认关闭多语言包功能 'DEFAULT_LANGUAGE' => 'zh-cn', // 默认语言 'AUTO_DETECT_LANG' => false, // 自动侦测语言 /* 数据库设置*/ 'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8 'DB_DEPLOY_TYPE' => 0, // 数据库部署方式0 集中式(单一服务器)1 分布式(主从服务器) 'DB_RW_SEPARATE' => false, 'DB_FIELDS_CACHE' => true, /* 数据缓存设置*/ 'DATA_CACHE_TIME' => -1, // 数据缓存有效期 'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存 'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存 'DATA_CACHE_TYPE' => 'File', // 数据缓存类型支持File Db Apc Memcache Shmop Sqlite Xcache Apachenote Eaccelerator 'DATA_CACHE_PATH' => TEMP_PA TH, // 缓存路径设置(仅对File方式缓存有效) 'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存(自动根据缓存标识的哈希创建子目录) 'DATA_PA TH_LEVEL' => 1, // 子目录缓存级别 'CACHE_SERIAL_HEADER' => "<?php\n//", // 文件缓存开始标记 'CACHE_SERIAL_FOOTER' => "\n?".">", // 文件缓存结束标记 /* 运行时间设置*/ 'SHOW_RUN_TIME' => false, // 运行时间显示 'SHOW_ADV_TIME' => false, // 显示详细的运行时间 'SHOW_DB_TIMES' => false, // 显示数据库查询和写入次数 'SHOW_CACHE_TIMES' => false, // 显示缓存操作次数 'SHOW_USE_MEM' => false, // 显示内存开销 'SHOW_PAGE_TRACE' => false, // 显示页面Trace信息由Trace文件定义和Action操作赋值 /* 模板引擎设置*/ 'TMPL_ENGINE_TYPE' => 'Think', // 默认模板引擎以下设置仅对使用Think模板引擎有效 'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数 'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记 'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记 'TAGLIB_BEGIN' => '<', // 标签库标签开始标记 'TAGLIB_END' => '>', // 标签库标签结束标记 'TAG_NESTED_LEVEL' => 3, // 标签库 'TAGLIB_LIST' => 'cx,html', // 内置标签库名称 /* Cookie设置*/ 'COOKIE_EXPIRE' => 3600, // Coodie有效期 'COOKIE_DOMAIN' => '', // Cookie有效域名 'COOKIE_PA TH' => '/', // Cookie路径 'COOKIE_PREFIX' => '', // Cookie前缀避免冲突 /* 数据格式设置*/ 'AJAX_RETURN_TYPE' => 'JSON', //AJAX 数据返回格式JSON XML ... /* 其它设置*/ 'AUTO_LOAD_PA TH' => 'Think.Util.', // __autoLoad 的路径设置当前项目的Model和Action类会自动加载,无需设置注意搜索顺序 'ACTION_JUMP_TMPL'=> 'Public:success', // 页面跳转的模板文件 'ACTION_404_TMPL'=> 'Public:404', // 404错误的模板文件 'APP_DOMAIN_DEPLOY' => false, // 是否使用独立域名部署项目 /* 需要加载的外部配置文件*/ 'EXTEND_CONFIG_LIST'=>array('taglibs','routes','tags','htmls','modules','actions'), // 内置可选配置包括:taglibs 标签库定义routes 路由定义tags 标签定义htmls 静态缓存定义modules 扩展模块actions 扩展操作);希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
ThinkPHP函数详解之M方法和R方法
首先给大家介绍ThinkPHP函数详解:M方法M方法用于实例化一个基础模型类,和D方法的区别在于:1、不需要自定义模型类,减少IO加载,性能较好;2、实例化后只能调用基础模型类(默认是Model类)中的方法;3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息;D方法的强大则体现在你封装的自定义模型类有多强,不过随着新版ThinkPHP框架的基础模型类的功能越来越强大,M方法也比D方法越来越实用了。
M方法的调用格式:M('[基础模型名:]模型名','数据表前缀','数据库连接信息')我们来看下M方法具体有哪些用法:1、实例化基础模型(Model)类在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作://实例化User模型$User = M('User');//执行其他的数据操作$User->select();这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。
缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。
$User = M('User');其实等效于:$User = new Model('User');表示操作think_user表。
M方法和D方法一样也有单例功能,多次调用并不会重复实例化。
M方法的模型名参数在转换成数据表的时候会自动转换成小写,也就是说ThinkPHP的数据表命名规范是全小写的格式。
2、实例化其他公共模型类第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。
$User = M('CommonModel:User');改用法其实等效于:$User = new CommonModel('User');因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。
ThinkPHP3快速入门教程-:基础
ThinkPHP3快速⼊门教程-:基础⼀、ThinkPHP的认识:ThinkPHP是⼀个快速、简单的基于MVC和⾯向对象的轻量级PHP开发框架。
⼆、下载后的⽬录结构:├─ThinkPHP.php 框架⼊⼝⽂件├─Common 框架公共⽂件├─Conf 框架配置⽂件├─Extend 框架扩展⽬录├─Lang 核⼼语⾔包⽬录├─Lib 核⼼类库⽬录│├─Behavior 核⼼⾏为类库│├─Core 核⼼基类库│├─Driver 内置驱动││├─Cache 内置缓存驱动││├─Db 内置数据库驱动││├─TagLib 内置标签驱动││└─Template 内置模板引擎驱动│└─Template 内置模板引擎└─Tpl 系统模板⽬录注意,框架的公共⼊⼝⽂件ThinkPHP.php是不能直接执⾏的,该⽂件只能在项⽬⼊⼝⽂件中调⽤才能正常运⾏。
三、⼊⼝⽂件:默认⼊⼝:public/index.php(实际部署的时候public⽬录为你的应⽤对外访问⽬录)。
引⼊⼊⼝⽂件:<?phprequire ‘/ThinkPHP框架所在⽬录/ThinkPHP.php’;>访问路径:⾃动⽣成项⽬⽬录,⽬录结构如下:├─index.php 项⽬⼊⼝⽂件├─Common 项⽬公共⽂件⽬录├─Conf 项⽬配置⽬录├─Lang 项⽬语⾔⽬录├─Lib 项⽬类库⽬录│├─Action Action类库⽬录│├─Behavior ⾏为类库⽬录│├─Model 模型类库⽬录│└─Widget Widget类库⽬录├─Runtime 项⽬运⾏时⽬录│├─Cache 模板缓存⽬录│├─Data 数据缓存⽬录│├─Logs ⽇志⽂件⽬录│└─Temp 临时缓存⽬录└─Tpl 项⽬模板⽬录移动修改⽬录⼊⼝⽂件的路径:<?phpdefine(‘APP_NAME’,’app’);define(‘APP_PATH’,’./app/’);require ’/ThinkPHP框架所在⽬录/ThinkPHP.php’;>APP_NAME和APP_PATH分部⽤于定义项⽬名和项⽬⽬录,项⽬名通常就是指项⽬的⽬录名称。
thinkphp模板,定义变量
竭诚为您提供优质文档/双击可除thinkphp模板,定义变量篇一:thinkphp前台模板的语法一、导入css和js文件的三种方式(了解)1、link方式(常规)//导入public文件夹下面的js目录中的test.js文件和css文件夹下的test.css文件2.import//导入public文件夹下面的js目录中的test.js文件,import标签可以省略type属性,默认就是public文件夹下的js文件夹,且默认是js文件。
//可以更改默认文件夹设置basepath属性3.load//方法可以自动检测导入的文件类型二、分支结构在前天模板上ifelse等都是以标签形式存在的(重点)1、if($age 未成年}elseif($age=18){青春期}else{成年}在前台模板中的代码如下:未成年青春年少成年解析:condition就是if的条件,注意if是个双标签,而else和elseif是个单标签,另外大家会发现我们用eq 代替了等于,lt代替了小于因为在前天模板中是不能用=,>gt//greaterthan==eq//equal>=egt//equalgreaterthan!=neq//notequal===heq//恒等于的h理解为汉语恒的首字母比较好理解,其实h是一个非常负载的单词,随意我们就不写了。
!==nheq//no同理得switch的用法,name中的值也就是switch中那个要变的值一个和尚挑水吃两个和尚台水吃三个和尚没水吃这里是默认值三、循环结构(重点)1.for下面的for语句相当于for($i=0;$i{$i}abc解析:1、tart,end不用说,也就是起始值和结束值;name值默认为i,在下面打上$i可以直接输出输出的序号值,从0开始2、step是间隔多少的意思,里面的值为正,则为几++,为负则为几——;3、comparison中的值是for语句里第二句的符号,也就是小于号;2.volist{$ername}volist循环输出从后台传来的list值,然后再这里命名为v,在下面用$v.名称,输出对应的值。
thinkphp常量和配置参数
常量参考预定义常量常量说明URL_COMMON=0 普通模式 URLURL_PATHINFO=1 P ATHINFO URLURL_REWRITE=2 REWRITE URLURL_COMPAT=3 兼容模式 URLHAS_ONE=1 HAS_ONE 关联定义BELONGS_TO=2 BELONGS_TO 关联定义HAS_MANY=3 HAS_MANY 关联定义MANY_TO_MANY=4 M ANY_TO_MANY 关联定义THINK_VERSION 框架版本号THINK_RELEASE 框架发行日期这些预定义常量不会随着环境的变化而变化。
1路径常量系统和项目的路径常量用于系统默认的目录规范,可以通过重新定义改变,如果不希望定制目录,这些常量一般不需要更改。
常量名说明默认值CORE_PATH 系统核心类库目录THINK_PATH.'Lib/'EXTEND_PATH 系统扩展目录THINK_PATH.'Extend/'MODE_PATH 模式扩展目录EXTEND_PATH.'Mode/'ENGINE_PATH 引擎扩展目录EXTEND_PATH.'Engine/'VENDOR_PATH 第三方类库目录 EXTEND_PATH.'Vendor/'LIBRARY_PATH 系统扩展类库目录EXTEND_PATH.'Library/'COMMON_PATH 项目公共目录APP_PATH.'Common/'LIB_PATH 项目类库目录APP_PATH.'Lib/'RUNTIME_PATH 项目运行时目录 APP_PATH.'Runtime/'CONF_PATH 项目配置目录APP_PATH.'Conf/'LOG_PATH 项目日志目录RUNTIME_PATH.'Logs/'CACHE_PATH 项目模板缓存目录RUNTIME_PATH.'Cache/'LANG_PATH 项目语言包目录 APP_PATH.'Lang/'TEMP_PATH 项目缓存目录RUNTIME_PATH.'Temp/'DATA_PATH 项目数据目录RUNTIME_PATH.'Data/'TMPL_PATH 项目模板目录APP_PATH.'Tpl/'HTML_PATH 项目静态缓存目录APP_PATH.'Html/'2系统常量下面这些系统常量会随着开发环境的改变或者设置的改变而产生变化。
ThinkPHP笔记完全配置参考手册
ThinkPHP笔记——完全配置参考手册ThinkPHP2.0配置CHECK_FILE_CASE -- windows环境下面的严格检查大小写。
/* 项目设定*/'APP_DEBUG' => false, // 是否开启调试模式'APP_DOMAIN_DEPLOY' => false, // 是否使用独立域名部署项目'APP_PLUGIN_ON' => false, // 是否开启插件机制'APP_FILE_CASE' => false, // 是否检查文件的大小写对Windows平台有效'APP_GROUP_DEPR' => '.', // 模块分组之间的分割符'APP_GROUP_LIST' => '', // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admi n''APP_AUTOLOAD_REG' => false, // 是否开启SPL_AUTOLOAD_REGISTER'APP_AUTOLOAD_PATH' => 'Think.Util.',// __autoLoad 机制额外检测路径设置,注意搜索顺序'APP_CONFIG_LIST' => array('taglibs','routes','tags','htmls','modules','actions'),// 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(ht mls)静态缓存定义, modules(扩展模块),actions(扩展操作)/* Cookie设置*/'COOKIE_EXPIRE' => 3600, // Coodie有效期'COOKIE_DOMAIN' => '', // Cookie有效域名'COOKIE_PATH' => '/', // Cookie路径'COOKIE_PREFIX' => '', // Cookie前缀避免冲突/* 默认设定*/'DEFAULT_APP' => '@', // 默认项目名称,@表示当前项目'DEFAULT_GROUP' => 'Home', // 默认分组'DEFAULT_MODULE' => 'Index', // 默认模块名称'DEFAULT_ACTION' => 'index', // 默认操作名称'DEFAULT_CHARSET' => 'utf-8', // 默认输出编码'DEFAULT_TIMEZONE' => 'PRC', // 默认时区'DEFAULT_AJAX_RETURN' => 'JSON', // 默认AJAX 数据返回格式,可选JSON XML ...'DEFAULT_THEME' => 'default', // 默认模板主题名称'DEFAULT_LANG' => 'zh-cn', // 默认语言/* 数据库设置*/'DB_TYPE' => 'mysql', // 数据库类型'DB_HOST' => 'localhost', // 服务器地址'DB_NAME' => '', // 数据库名'DB_USER' => 'root', // 用户名'DB_PWD' => '', // 密码'DB_PORT' => 3306, // 端口'DB_PREFIX' => 'think_', // 数据库表前缀'DB_SUFFIX' => '', // 数据库表后缀'DB_FIELDTYPE_CHECK' => false, // 是否进行字段类型检查'DB_FIELDS_CACHE' => true, // 启用字段缓存'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'DB_RW_SEPARATE' => false, // 数据库读写是否分离主从式有效/* 数据缓存设置*/'DATA_CACHE_TIME' => -1, // 数据缓存有效期'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqli te| Xcache|Apachenote|Eaccelerator'DATA_CACHE_PATH' => TEMP_PATH,// 缓存路径设置(仅对File方式缓存有效)'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存(自动根据缓存标识的哈希创建子目录) 'DATA_PATH_LEVEL' => 1, // 子目录缓存级别/* 错误设置*/'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~',//错误显示信息,非调试模式有效'ERROR_PAGE' => '', // 错误定向页面/* 静态缓存设置*/'HTML_CACHE_ON' => false, // 默认关闭静态缓存'HTML_CACHE_TIME' => 60, // 静态缓存有效期'HTML_READ_TYPE' => 0, // 静态缓存读取方式0 readfile 1 redirect'HTML_FILE_SUFFIX' => '.shtml',// 默认静态文件后缀/* 语言设置*/'LANG_SWITCH_ON' => false, // 默认关闭多语言包功能'LANG_AUTO_DETECT' => true, // 自动侦测语言开启多语言功能后有效/* 日志设置*/'LOG_RECORD' => false, // 默认不记录日志'LOG_FILE_SIZE' => 2097152, // 日志文件大小限制'LOG_RECORD_LEVEL' => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别/* 分页设置*/'PAGE_ROLLPAGE' => 5, // 分页显示页数'PAGE_LISTROWS' => 20, // 分页每页显示记录数/* SESSION设置*/'SESSION_AUTO_START' => true, // 是否自动开启Session// 内置SESSION类可用参数//'SESSION_NAME' => '', // Session名称//'SESSION_PATH' => '', // Session保存路径//'SESSION_CALLBACK' => '', // Session 对象反序列化时候的回调函数/* 运行时间设置*/'SHOW_RUN_TIME' => false, // 运行时间显示'SHOW_ADV_TIME' => false, // 显示详细的运行时间'SHOW_DB_TIMES' => false, // 显示数据库查询和写入次数'SHOW_CACHE_TIMES' => false, // 显示缓存操作次数'SHOW_USE_MEM' => false, // 显示内存开销'SHOW_PAGE_TRACE' => false, // 显示页面Trace信息由Trace文件定义和Action操作赋值'SHOW_ERROR_MSG' => true, // 显示错误信息/* 模板引擎设置*/'TMPL_ENGINE_TYPE' => 'Think', // 默认模板引擎以下设置仅对使用Think模板引擎有效'TMPL_DETECT_THEME' => false, // 自动侦测模板主题'TMPL_TEMPLATE_SUFFIX' => '.html', // 默认模板文件后缀'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数'TMPL_PARSE_STRING' => '', // 模板引擎要自动替换的字符串,必须是数组形式。
教你一步一步循序渐进学习ThinkPHP,一些小例子
一步一步循序渐进学习TP一(新手篇)前言TP的手册相当多,其实不必再出这样的贴子,论技术,我也是菜鸟一个,同时也在学习当中。
看到论坛上多了不少新朋友,不少在抱怨手册看不懂,那我就姑且抛砖引玉,尝试与新朋友们更简单地、手把手地进入TP的应用中去。
讲解过程中有错的地方,大家帮忙指正。
这个系列,初步定下的目标为,从零开始,以TP示例中心中的Form为例进行讲解,以实践为主,理论为辅,将TP的最基本内容逛一遍,至少让我们一起学会如何进行最简单的对数据进行查、增、改、删操作并输出到模板。
由于我们说的是循序渐进,所以我用步骤式来说明,只要一步一步跟着做,相信聪明的你在使用过程中就会明白TP的应用了。
注意:以下的步骤,仅仅是TP灵活的布署方式其中一种,实际开发中可以根据自己的情况去另行设定。
至于为什么那样做,我们会在最后再作总结,我觉得先实操然后再进行说明比较容易明白。
以下不再重复解释。
============================================一快速开始一个项目名词解释:项目:你要开发的系统,称之为项目。
入口文件:你可以理解为这个项目的唯一一道门,以后所有的操作都会通过这道门去执行处理。
不必理会什么意思,你甚至可以先把它看成是index.php就是入口文件TP: ThinkPHP框架的简称1 下载TP1.5正式版2 拟好你的项目名称,我们这里以Myapp 为项目名称3 在www根目录下,将TP框架所有文件全部复制过去,文件夹名称是ThinkPHP4 与ThinkPHP同级新建一个文件夹,起名为Myapp,也就是项目名称5 在www根目录下,创建一个PHP文件,起名index.php,这就是入口文件入口文件index.php代码:1<?php2// 定义ThinkPHP路径3define('THINK_PATH','./ThinkPHP');4// 定义项目名称5define('APP_NAME','Myapp');6// 定义项目路径7define('APP_PATH','./Myapp');8// 加载入口文件9require(THINK_PATH.'/ThinkPHP.php');10// 实例化这个项目11$App = new App();12// 执行初始化13$App->run();14?>复制代码就这么简单几行,然后打开浏览器,输入http://127.0.0.1/一个TP项目就这样构建出来了。
ThinkPHP5.1教程64.多语言
64.多语言学习要点:1.配置多语言2.调用方式本节课我们来学习一下如何配置的多语言功能,并实现调用方法。
一.配置多语言1.如果要开启多语言切换功能,需要在app.php配置文件中开启;//是否开启多语言'lang_switch_on'=>true,2.默认应用目录会调用application\lang目录下的语言包,我们创建三个;//错误信息,zh-cn.phpreturn['require_name'=>'用户名不得为空!','email_error'=>'邮箱地址不正确!',];//error message,en-us.phpreturn['require_name'=>'The user name cannot be empty!','email_error'=>'Incorrect email address!',];//エラーメッセージ,ja-jp.phpreturn['require_name'=>'ユーザ名は空ではいけません!','email_error'=>'メールアドレスが間違っています!',];3.以上三个语言包,会根据条件自动加载,如果不在指定的目录则需要::load();Lang::load('../application/common/lang/xx-xx.php');4.系统默认会指定:zh-cn这个语言包,我们通过::get()来输出错误信息;Lang::get('email_error');5.通过URL方式来切换语言,?lang=en-us即可,也可以在公共文件设置cookie;\think\facade\Cookie::prefix('think_');\think\facade\Cookie::set('var','en-us');6.在模版中调用语言信息,可以用$ng.xxx或{:lang('xxx')};7.助手函数:lang('email_error');8.可以在公共文件,设置语言包限定列表,如下:Lang::setAllowLangList(['zh-cn','en-us','ja-jp']);9.当开启限定列表后,默认语言又可以设置了。
如何使用前端框架技术进行多语言切换
如何使用前端框架技术进行多语言切换多语言切换在当今全球化的互联网时代中变得越来越重要。
对于前端开发人员来说,通过使用前端框架技术来实现多语言切换是一种高效且可扩展的方法。
本文将介绍使用前端框架技术进行多语言切换的几种常用方法。
1. 使用国际化库许多前端框架都提供了国际化(i18n)的支持,如Vue、React等。
这些框架通常提供了专门的国际化库,可以方便地在应用程序中实现多语言切换。
通过将文本内容转换为键值对的形式,并为不同语言提供不同的翻译文件,开发人员可以轻松地切换应用程序的显示语言。
以Vue.js为例,可以使用vue-i18n库来实现多语言切换。
首先,需要在应用程序中引入vue-i18n库并创建一个i18n实例。
然后,在应用程序的组件中,可以使用特殊的指令(如v-t)或过滤器(如$t)来显示文本内容。
通过切换i18n实例的locale属性,可以实现不同语言的切换。
2. 使用语言文件另一种常用的方法是使用语言文件来存储应用程序中的文本内容。
开发人员可以为每种语言创建一个独立的语言文件,其中包含相应语言的文本内容。
在应用程序中,通过动态加载对应的语言文件,可以实现多语言切换。
这种方法通常用于没有提供国际化支持的框架或第三方库。
开发人员需要创建一个翻译文件夹,并在其中为每种语言创建一个对应的JSON文件。
每个文件包含一个键值对,其中键是原始文本,值是对应语言的翻译。
通过加载并解析相应的语言文件,开发人员可以动态地替换应用程序中的文本内容。
3. 使用第三方平台除了使用前端框架提供的国际化支持,开发人员还可以使用第三方平台来管理多语言内容。
这些平台通常提供一个易于使用的界面,开发人员可以在其中创建和管理不同语言的翻译。
一些知名的第三方平台包括Transifex、Crowdin等。
通过集成这些平台的API,开发人员可以在应用程序中实时加载和更新翻译内容。
这种方法通常适用于多人协作的项目,可以更好地管理多语言内容的翻译和更新。
thinkphp 前台模板的语法
一、导入 CSS 和 JS 文件的三种方式(了解)1 、 link 方式(常规)<link rel=’stylesheet’type=’text/css’href=’__PUBLIC__/Js/test.css/><script src='__PUBLIC__/Js/test.js'></script>// 导入 Public 文件夹下面的 Js 目录中的 test.js 文件和 Css 文件夹下的 test.css 文件2.import<import type='js' file='Js.test' /> // 导入 Public 文件夹下面的 Js 目录中的 test.js 文件, import 标签可以省略 type 属性,默认就是 Public 文件夹下的Js 文件夹,且默认是 js 文件。
<import type='css' file='Css.test' />// 可以更改默认文件夹设置 basepath 属性<import type='js' file='Js.my' basepath='./Other'/>3.load// 方法可以自动检测导入的文件类型<load href='__PUBLIC__/Js/test.js' /><load href='__PUBLIC__/Css/test.css' />二、分支结构在前天模板上 if else 等都是以标签形式存在的(重点)1 、 if ($age<18) {未成年}elseif($age=18){青春期}else{成年}在前台模板中的代码如下:<if condition='$age lt 18'>未成年<elseif condition='$age eq 18'/><else />成年</if>解析: condition 就是 if 的条件,注意 if 是个双标签,而 else 和 elseif 是个单标签,另外大家会发现我们用 eq 代替了等于, lt 代替了小于因为在前天模板中是不能用= , < 这些的,下面是详细的替代方式,都是以英文简写形式的,> gt // greater than< lt //less than== eq //equal<= elt // equal less than>= egt //equal greater than!= neq //not equal=== heq // 恒等于的 h 理解为汉语恒的首字母比较好理解,其实 h 是一个非常负载的单词,随意我们就不写了。
thinkphp修改配置进入默认首页的方法
thinkphp修 改 配 置 进 入 默 认 首 页 的 方 法
thinkphp文件夹下config 里面有个convention.php文件 里面有三个配置
'DEFAULT_MODULE' => 'Home', // 默认模块 'DEFAULT_CONTROLLER' => 'Index', // 默认控制器名称 'DEFAULT_ACTION' => 'index', // 默认操作名称
改掉这三个就可以改默认的首页
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定
thinkphp field中文字段
thinkphp field中文字段ThinkPHP是一款基于PHP的开源框架,广泛应用于网站开发领域。
在ThinkPHP中,Field(字段)是一种用于定义数据库表结构的元素。
在数据库中,表由多个字段组成,每个字段定义了表中的一个属性。
本文将介绍ThinkPHP中的Field字段,并详细讨论其在网站开发中的使用。
在ThinkPHP中,可以使用Field字段来定义数据库表中的各个字段。
Field提供了丰富的方法,使得我们可以灵活地定义字段的类型、长度、默认值、是否为主键等属性。
通过合理地定义Field,我们可以有效地管理和操作数据库表格。
首先,Field字段的类型是非常重要的。
ThinkPHP提供了多种字段类型供开发者选择,如字符串、整型、浮点型、日期时间型等。
通过选择合适的类型,我们可以确保存储和操作数据的准确性。
例如,如果需要存储用户的姓名,则可以选择字符串类型的Field。
其次,Field字段的长度也需要被考虑到。
根据实际需要,我们可以为不同的字段设置不同的长度。
例如,在存储手机号码时,我们可以将对应字段的长度设置为11位,保证存储的数据准确并节省空间。
Field字段还可以定义字段的默认值。
如果某个字段未设置任何值时,默认值将会被插入。
这在保证数据完整性和一致性方面是非常有用的。
例如,在用户注册时,我们可以设定性别字段的默认值为“未知”,以防止用户未填写的情况。
此外,Field字段还可以指定是否为主键,以及是否自增。
主键是指在表中唯一标识一条记录的字段,用于保证数据的唯一性。
通过设置主键,我们可以更好地管理和索引数据。
自增字段是指字段在每次插入数据时会自动增加,简化了数据插入的过程。
在ThinkPHP中,我们可以通过简单的设定来实现主键和自增字段的功能。
在开发过程中,Field字段的定义需要经过精心的设计和考虑。
一个好的数据库设计可以提高系统的性能和扩展性。
通过使用合适的Field字段,我们可以确保数据的准确性和完整性,从而为用户提供更好的体验。
php简单实现多语言切换的方法
本文实例讲述了php简单实现多语言切换的方法。
分享给大家供大家参考,具体如下:1.主程序代码:<?phpinclude "lib/function.php";?><script src="js/language.js"></script><?phpif(isset($_GET["language"])){ $_SESSION["language"] = $_GET["language"];}else{ $_SESSION["language"] = getDefalutlanguage();}$language_name = getLanguageName($_SESSION["language"]);include "lang/".$language_name.".inc";?><SELECT NAME="language" id="language" onchange="changeLanguage(this)"><?php $language_array = array_language(); foreach($language_array as $key => $value){ if($_SESSION["language"] == $value){ $selected = "selected = 'selected' "; }else{ $selected = ""; }?><OPTION V ALUE="<?php echo $value;?>" <?php echo $selected;?>><?php echo getLanguageName($value);?></OPTION>;<? }?></SELECT><?php if($_GET["language"] == $value){ //$selected = "selected = 'selected' "; }echo "语言:".$_SESSION["language"];echo "测试:".$name;?>2. 所包含的语言包:English.inc<?php$name = "name";?>Chinese.inc<?php$name = "名字";?>3. 所包含的function.php<?php function getV ailableLanguage() { $language = array( 'af' => 'Afrikaans', 'az' => 'Azerbaijani', 'eu' => 'Basque', 'be' => 'Belarusian', 'be-lat' => 'Belarusian latin', 'bg' => 'Bulgarian', 'bs' => 'Bosnian', 'ca' => 'Catalan', 'zh' => 'Chinese', //'zh-TW' => 'Chinese traditional', //'zh-CN' => 'Chinese simplified', 'cs' => 'Czech', 'da' => 'Danish', 'de' => 'German', 'el' => 'Greek', 'en' => 'English', 'es' => 'Spanish', 'et' => 'Estonian', 'fa' => 'Persian', 'fi' => 'Finnish', 'fr' => 'French', 'gl' => 'Galician', 'he' => 'Hebrew', 'hi' => 'Hindi', 'hr' => 'Croatian', 'hu' => 'Hungarian', 'id' => 'Indonesian', 'it' => 'Italian', 'ja' => 'Japanese', 'ko' => 'Korean', 'ka' => 'Georgian', 'lt' => 'Lithuanian', 'lv' => 'Latvian', 'mk' => 'Macedonian', 'mn' => 'Mongolian', 'ms' => 'Malay', 'nl' => 'Dutch', 'no' => 'Norwegian', 'pl' => 'Polish', 'pt-BR' => 'Brazilian portuguese', 'pt' => 'Portuguese', 'ro' => 'Romanian', 'ru' => 'Russian', 'si' => 'Sinhala', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'sq' => 'Albanian', 'sr-lat' => 'Serbian latin', 'sr' => 'Serbian', 'sv' => 'Swedish', 'th' => 'Thai', 'tr' => 'Turkish', 'tt' => 'Tatarish', 'uk' => 'Ukrainian', ); return $language; } function getLanguageName($language) { $languages = getVailableLanguage(); return $languages[$language]; } function array_language(){ $array_language = array("en","zh"); return $array_language; } function getDefalutlanguage(){ return "zh"; }?>4.所包含的language.jsfunction changeLanguage(obj) { var url = document.URL; var re = re = /[?&]language=[ location.href = url;}希望本文所述对大家PHP程序设计有所帮助。
PHP批量修改mysql数据库的数据表前缀
PHP批量修改mysql数据库的数据表前缀ECSHOP开发中心()<?php//设置好相关信息$dbserver='localhost';//连接的服务器一般为localhost$dbname='数据库名';//数据库名$dbuser='数据库用户名';//数据库用户名$dbpassword='数据库密码';//数据库密码$old_prefix='dede_';//数据库当前表的前缀$new_prefix='ed';//数据库的前缀修改为的if (!is_string($dbname) || !is_string($old_prefix)|| !is_string($new_prefix) ){return false;}if (!mysql_connect($dbserver,$dbuser, $dbpassword)) {print 'Could not connect to mysql';exit;}//取得数据库内所有的表名$result =mysql_list_tables($dbname);if (!$result) {print "DB Error, could notlist tables\n";print 'MySQL Error: ' .mysql_error();exit;}//把表名存进$datawhile ($row =mysql_fetch_row($result)) {$data[] = $row[0];}//过滤要修改前缀的表名foreach($data as $k => $v){$preg = preg_match("/^($old_prefix{1})([a-zA-Z0-9_-]+)/i", $v, $v1);if($preg){$tab_name[$k] =$v1[2];//$tab_name[$k]str_replace($old_prefix, '', $v);}}if($preg){// echo '<pre>';// print_r($tab_name);// exit();//批量重命名foreach($tab_name as $k =>$v){$sql = 'RENAME TABLE`'.$old_prefix.$v.'` TO `'.$new_prefix.$v.'`';mysql_query($sql);}print 数据表前缀:.$old_prefix."".已经修改为:.$new_prefix."";}else{ print 您的数据库表的前缀.$old_prefix.输入错误。
ThinkPHP中_after_update、_before_update等的用法
ThinkPHP中_after_update、_before_update等的⽤法https:///aslackers/article/details/50339163TP系统\Think\Model类⾥隐藏了⼏个有⽤的⽅法:_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select。
但是在⼿册⾥并没有列出来,只有在源码中才能看到。
新建个测试类ArticleModel.class.phpclass ArticleModel extends Model {protected$article = '';public function _initialize(){$this->article = M('Article');}public function updateArt($id = 0, $data = array()){$this->article->where('id = ' . $id)->save($data);}protected function _before_update(&$data,$options) {$data['contents'] = 'ppppppp';}protected function _after_update($data,$options) {$this->article->add($data);}}在控制器⾥调⽤public function update() {$id = 1;$data['title'] = 'ttt';D('Article')->updateArt($id,$data);}class ArticleModel extends Model {public function updateArt($id = 0, $data = array()){$this->where('id = ' . $id)->save($data);}protected function _before_update(&$data,$options) {$data['contents'] = 'ppppppp';}protected function _after_update($data,$options) {$this->add($data);}}结果发现,_before_update和_after_update都没触发,但在系统的\Think\Model类⾥却能触发,⼿册中关于M⽅法和D⽅法,发现这句:D⽅法可以⾃动检测模型类,如果存在⾃定义的模型类,则实例化⾃定义模型类,如果不存在,则会实例化系统的\Think\Model基类,同时对于已实例化过的模型,不会重复去实例化。
ThinkPHP教程_PHP框架之ThinkPHP(六)【实例化模型、模型命名和获取字段】
ThinkPHP教程_PHP框架之ThinkPHP(六)【实例化模型、模型命名和获取字段】⼀、实例化模型 在ThinkPHP2.0及以上版本中,可以⽆需进⾏任何模型定义。
只有在需要封装单独的业务逻辑时,模型类才是必须定义的,因此ThinkPHP在模型上有很多灵活性和⽅便性,⽽不必因为表太多⽽烦恼 ThinkPHP有⼏种实例化模型的⽅法 1、实例化基础模型类 即实例化系统⾃带的Model类,ThinkPHP会⾃动帮我们找到数据库中相应的表,并获取其字段(表结构信息) ·$User=new Model('User'); ·$User=M('User');(快捷⽅法,通过M()函数) ⼤写字母与下划线关系(think_是在配置⽂件中设置的表前缀) 实例化基础模型类传递进去的参数 在数据库中对应的表名 User think_user UserMessage think_user_message ps,因为表前缀中已经有了⼀个下划线,所以user对应的也是think_user 2、实例化其它模型类 第⼀种实例化⽅法因为没有涉及⾃定义模型类,因此很难封装⼀些⾃定义的业务逻辑(因为ThinkPHP⾃带的基础模型类显然只提供了基本的CRUD操作等等⼀些操作,肯定是⽆法满⾜项⽬业务逻辑的,所以必须⾃定义模型类来封装⾃定义业务逻辑),如果只需要扩展⼀些通⽤的(所谓通⽤,就是多个针对不同表的模型类都需要⽤到的逻辑)⾃定义业务逻辑,那么可以采⽤这种⽅式 ·$User=new CommonModel('User'); ·$User=M('User','CommonModel');(快捷⽅式,通过M()函数) ps,CommonModel类是⼀个⾃定义模型类,在应⽤⽬录->Lib⽬录->Model⽬录->CommonModel.class.php⽂件中 因为ThinkPHP是⾃动加载模型类的,所以在实例化模型类之前不需要⼿动模型类⽂件的导⼊,即不需要require '模型类⽂件';等 ⾃定义模型类必须继承系统⾃带的模型类(⽐如说Model类),⽽且没有别名导⼊的话,⾃定义模型类⽂件必须放在应⽤⽬录->Lib⽬录->Model⽬录下 可以在CommonModel类⾥⾯定义⼀些通⽤的逻辑⽅法,就可以省去为每个数据表定义具体的模型类,如果你的项⽬已经有超过100个数据表了,⽽⼤多数情况都是⼀些基本的CURD操作的话,只是个别模型有⼀些复杂的业务逻辑需要封装,那么第⼀种⽅式和第⼆种⽅式的结合是⼀个不错的选择。
Phpthink入门基础大全(CURD部分)
Phpthink⼊门基础⼤全(CURD部分)[ad code=1 align=center] $data[1]['name'] = ‘阳光⾬' $data[1]['email'] = $User>addAll($data) $array['phone'] = '12335678′ $this->assign($array)) // 调⽤ Xp 主题的 User 模块的 edit 操作模版 $this->display(‘/Member/read.html’) // 直接指定模版⽂件的全名} //输出 Session 变量 {&var} //输出配置参数 {%var} //输出语⾔变量 {*var} //输出常量 {^var} //输出 POST 变量 {.var} //输出 GET 变量 ThinkPHP中的BUG及技巧与策略: 1. If标签 如: 试验后总是有想不到的错误,这样,还不如直接⽤来得快些呢。
2. 模板中不能使⽤的标签 {$content} {$i} 约定: 1.数据库表名全部采⽤⼩写, 2.模型的类名以Model为后缀,类名第⼀个字母须⼤写 3.控制器的类名以Action为后缀 4.所有类库⽂件必须使⽤。
class.php作为⽂件后缀,并且类名和⽂件名保持⼀致 如: 数据表名:前缀_表名 模型类名:表名Model 注:这⾥的表名第⼀个字母要⼤写 创建对象: D(‘表名’)注:这⾥的表名第⼀个字母要⼤写 定义控制器类 class IndexAction extends Action{ public function show(){ echo ‘这是新的 show 操作'; } } 然后在浏览器⾥⾯输⼊ 定义模型类: class 表名Model extends Model{ [//⼿动定义字段[可选] protected $fields = array( 'id', 'username', 'email', 'age', '_pk'=>'id', //主键 '_autoInc'=>true //是否⾃增 ) ] } 记录的修改: $User = D(“User”) // 实例化 User 对象 $User->find(1) // 查找 id 为 1 的记录 $User->name = 'ThinkPHP' // 把查找到的记录的名称字段修改为 ThinkPHP $User->save() // 保存修改的数据 更新特定字段的值 $User->setField('name','TopThink','id=1′) 同样可以⽀持对字段的操作 $User->setField('score',’(score+1)‘,'id=1′) 新建记录,⽅法1: $User = new UserModel() //实例化 User 对象 $User->字段名 = 字段值 //给字段赋值 $User->add() //添加记录 新建记录,⽅法2: $data[’字段名‘] = 字段值; //给字段赋值 $User = D('User’); //实例化 User 对象 $User->add($data); //$insertId,Add ⽅法的返回值就是最新插⼊的主键值,可以直接获取。