大家好,关于thinkphp获取当前域名很多朋友都还不太明白,今天小编就来为大家分享关于thinkphp3.2 怎么修改url的模式的知识,希望对各位有所帮助!
thinkphp3.2 常量配置在哪惯例配置
应用设定
APP_USE_NAMESPACE=>true,//应用类库是否使用命名空间3.2.1新增
APP_SUB_DOMAIN_DEPLOY=>false,//是否开启子域名部署
APP_SUB_DOMAIN_RULES=>array(),//子域名部署规则
APP_DOMAIN_SUFFIX=>,//域名后缀如果是com.cnnet.cn之类的后缀必须设置
ACTION_SUFFIX=>,//操作方法后缀
MULTI_MODULE=>true,//是否允许多模块如果为false则必须设置DEFAULT_MODULE
MODULE_DENY_LIST=>array(Common,Runtime),//禁止访问的模块列表
MODULE_ALLOW_LIST=>array(),//允许访问的模块列表
CONTROLLER_LEVEL=>1,
APP_AUTOLOAD_LAYER=>Controller,Model,//自动加载的应用类库层(针对非命名空间定义类库)3.2.1新增
APP_AUTOLOAD_PATH=>,//自动加载的路径(针对非命名空间定义类库)3.2.1新增
默认设定
DEFAULT_M_LAYER=>Model,//默认的模型层名称
DEFAULT_C_LAYER=>Controller,//默认的控制器层名称
DEFAULT_V_LAYER=>View,//默认的视图层名称
DEFAULT_LANG=>zh-cn,//默认语言
DEFAULT_THEME=>,//默认模板主题名称
DEFAULT_MODULE=>Home,//默认模块
DEFAULT_CONTROLLER=>Index,//默认控制器名称
DEFAULT_ACTION=>index,//默认操作名称
DEFAULT_CHARSET=>utf-8,//默认输出编码
DEFAULT_TIMEZONE=>PRC,//默认时区
DEFAULT_AJAX_RETURN=>JSON,//默认AJAX数据返回格式,可选JSONXML...
DEFAULT_JSONP_HANDLER=>jsonpReturn,//默认JSONP格式返回的处理方法
DEFAULT_FILTER=>htmlspecialchars,//默认参数过滤方法用于I函数...
Cookie设置
COOKIE_EXPIRE=>0,//Cookie有效期
COOKIE_DOMAIN=>,//Cookie有效域名
COOKIE_PATH=>/,//Cookie路径
COOKIE_PREFIX=>,//Cookie前缀避免冲突
COOKIE_HTTPONLY=>,//Cookie的httponly属性3.2.2新增
数据库设置
DB_TYPE=>,//数据库类型
DB_HOST=>,//服务器地址
DB_NAME=>,//数据库名
DB_USER=>,//用户名
DB_PWD=>,//密码
DB_PORT=>,//端口
DB_PREFIX=>,//数据库表前缀
DB_FIELDTYPE_CHECK=>false,//是否进行字段类型检查3.2.3版本废弃
DB_FIELDS_CACHE=>true,//启用字段缓存
DB_CHARSET=>utf8,//数据库编码默认采用utf8
DB_DEPLOY_TYPE=>0,//数据库部署方式:0集中式(单一服务器),1分布式(主从服务器)
DB_RW_SEPARATE=>false,//数据库读写是否分离主从式有效
DB_MASTER_NUM=>1,//读写分离后主服务器数量
DB_SLAVE_NO=>,//指定从服务器序号
DB_SQL_BUILD_CACHE=>false,//数据库查询的SQL创建缓存3.2.3版本废弃
DB_SQL_BUILD_QUEUE=>file,//SQL缓存队列的缓存方式支持filexcache和apc3.2.3版本废弃
DB_SQL_BUILD_LENGTH=>20,//SQL缓存的队列长度3.2.3版本废弃
DB_SQL_LOG=>false,//SQL执行日志记录3.2.3版本废弃
DB_BIND_PARAM=>false,//数据库写入数据自动参数绑定
DB_DEBUG=>false,//数据库调试模式3.2.3新增
DB_LITE=>false,//数据库Lite模式3.2.3新增
数据缓存设置
DATA_CACHE_TIME=>0,//数据缓存有效期0表示永久缓存
DATA_CACHE_COMPRESS=>false,//数据缓存是否压缩缓存
DATA_CACHE_CHECK=>false,//数据缓存是否校验缓存
DATA_CACHE_PREFIX=>,//缓存前缀
DATA_CACHE_TYPE=>File,//数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
DATA_CACHE_PATH=>TEMP_PATH,//缓存路径设置(仅对File方式缓存有效)
DATA_CACHE_SUBDIR=>false,//使用子目录缓存(自动根据缓存标识的哈希创建子目录)
DATA_PATH_LEVEL=>1,//子目录缓存级别
错误设置
ERROR_MESSAGE=>页面错误!请稍后再试~,//错误显示信息,非调试模式有效
ERROR_PAGE=>,//错误定向页面
SHOW_ERROR_MSG=>false,//显示错误信息
TRACE_MAX_RECORD=>100,//每个级别的错误信息最大记录数
日志设置
LOG_RECORD=>false,//默认不记录日志
LOG_TYPE=>File,//日志记录类型默认为文件方式
LOG_LEVEL=>EMERG,ALERT,CRIT,ERR,//允许记录的日志级别
LOG_EXCEPTION_RECORD=>false,//是否记录异常信息日志
SESSION设置
SESSION_AUTO_START=>true,//是否自动开启Session
SESSION_OPTIONS=>array(),//session配置数组支持typenameidpathexpiredomain等参数
SESSION_TYPE=>,//sessionhander类型默认无需设置除非扩展了sessionhander驱动
SESSION_PREFIX=>,//session前缀
模板引擎设置
TMPL_CONTENT_TYPE=>text/html,//默认模板输出类型
TMPL_ACTION_ERROR=>THINK_PATH.Tpl/dispatch_jump.tpl,//默认错误跳转对应的模板文件
TMPL_ACTION_SUCCESS=>THINK_PATH.Tpl/dispatch_jump.tpl,//默认成功跳转对应的模板文件
TMPL_EXCEPTION_FILE=>THINK_PATH.Tpl/think_exception.tpl,//异常页面的模板文件
TMPL_DETECT_THEME=>false,//自动侦测模板主题
TMPL_TEMPLATE_SUFFIX=>.html,//默认模板文件后缀
TMPL_FILE_DEPR=>/,//模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
TMPL_ENGINE_TYPE=>Think,//默认模板引擎以下设置仅对使用Think模板引擎有效
TMPL_CACHFILE_SUFFIX=>.php,//默认模板缓存后缀
TMPL_DENY_FUNC_LIST=>echo,exit,//模板引擎禁用函数
TMPL_DENY_PHP=>false,//默认模板引擎是否禁用PHP原生代码
TMPL_L_DELIM=>{,//模板引擎普通标签开始标记
TMPL_R_DELIM=>},//模板引擎普通标签结束标记
TMPL_VAR_IDENTIFY=>array,//模板变量识别。留空自动判断,参数为obj则表示对象
TMPL_STRIP_SPACE=>true,//是否去除模板文件里面的html空格与换行
TMPL_CACHE_ON=>true,//是否开启模板编译缓存,设为false则每次都会重新编译
TMPL_CACHE_PREFIX=>,//模板缓存前缀标识,可以动态改变
TMPL_CACHE_TIME=>0,//模板缓存有效期0为永久,(以数字为值,单位:秒)
TMPL_LAYOUT_ITEM=>{__CONTENT__},//布局模板的内容替换标识
LAYOUT_ON=>false,//是否启用布局
LAYOUT_NAME=>layout,//当前布局名称默认为layout
URL设置
URL_CASE_INSENSITIVE=>true,//默认false表示URL区分大小写true则表示不区分大小写
URL_MODEL=>1,//URL访问模式,可选参数0、1、2、3,代表以下四种模式:
//0(普通模式);1(PATHINFO模式);2(REWRITE模式);3(兼容模式)默认为PATHINFO模式
URL_PATHINFO_DEPR=>/,//PATHINFO模式下,各参数之间的分割符号
URL_PATHINFO_FETCH=>ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL,//用于兼容判断PATH_INFO参数的SERVER替代变量列表
URL_REQUEST_URI=>REQUEST_URI,//获取当前页面地址的系统变量默认为REQUEST_URI
URL_HTML_SUFFIX=>html,//URL伪静态后缀设置
URL_DENY_SUFFIX=>ico|png|gif|jpg,//URL禁止访问的后缀设置
URL_PARAMS_BIND=>true,//URL变量绑定到Action方法参数
URL_PARAMS_BIND_TYPE=>0,//URL变量绑定的类型0按变量名绑定1按变量顺序绑定
URL_404_REDIRECT=>,//404跳转页面部署模式有效
URL_ROUTER_ON=>false,//是否开启URL路由
URL_ROUTE_RULES=>array(),//默认路由规则针对模块
URL_MAP_RULES=>array(),//URL映射定义规则
系统变量名称设置
VAR_MODULE=>m,//默认模块获取变量
VAR_CONTROLLER=>c,//默认控制器获取变量
VAR_ACTION=>a,//默认操作获取变量
VAR_AJAX_SUBMIT=>ajax,//默认的AJAX提交变量
VAR_JSONP_HANDLER=>callback,
VAR_PATHINFO=>s,//兼容模式PATHINFO获取变量例如?s=/module/action/id/1后面的参数取决于URL_PATHINFO_DEPR
VAR_TEMPLATE=>t,//默认模板切换变量
VAR_ADDON=>addon,//默认的插件控制器命名空间变量3.2.2新增
其他设置
HTTP_CACHE_CONTROL=>private,//网页缓存控制
CHECK_APP_DIR=>true,//是否检查应用目录是否创建
FILE_UPLOAD_TYPE=>Local,//文件上传方式
DATA_CRYPT_TYPE=>Think,//数据加密方式
thinkphp show方法怎么用在了解了控制器和模型操作后,我们开始熟悉视图部分,ThinkPHP中的视图主要就是指模板文件和模板引擎,本篇首先了解下模板文件以及是如何进行渲染输出的。
一、模板定义
为了对模板文件更加有效的管理,ThinkPHP对模板文件进行目录划分,默认的模板文件定义规则是:
模板目录/[分组名/][模板主题/]模块名/操作名+模板后缀
模板目录默认是项目下面的Tpl,当定义分组的情况下,会按照分组名分开子目录,新版模板主题默认是空(表示不启用模板主题功能),
模板主题功能是为了多模板切换而设计的,如果有多个模板主题的话,可以用DEFAULT_THEME参数设置默认的模板主题名。
在每个模板主题下面,是以项目的模块名为目录,然后是每个模块的具体操作模板文件,例如:
User模块的add操作对应的模板文件就应该是:
Tpl/User/add.html
模板文件的默认后缀是.html,也可以通过TMPL_TEMPLATE_SUFFIX来配置成其他的。例如,我们可以配置:
TMPL_TEMPLATE_SUFFIX=>.tpl
定义后,User模块的add操作对应的模板文件就变成是:
Tpl/User/add.tpl
如果项目启用了模块分组功能(假设User模块属于Home分组),那么默认对应的模板文件可能变成:
Tpl/Home/User/add.html
分组模式下面,如果觉得目录结构太深,可以通过设置TMPL_FILE_DEPR参数来配置简化模板的目录层次,例如设置:
TMPL_FILE_DEPR=>_
默认的模板文件就变成了:
Tpl/Home/User_add.html
正是因为系统有这样一种模板文件自动识别的规则,所以给我们的模板渲染输出带来了简化。
二、模板渲染
模板定义后就可以通过display和show方法来渲染输出。其中display方法需要我们有定义模板文件,而show方法则是直接渲染内容输出。
最常用的是display方法,调用格式:
第一种: display([主题:][模块:][操作][,字符编码][,输出类型])
第二种: display(完整的模板文件名[,字符编码][,输出类型])
下面是一个最典型的用法,不带任何参数:
$this->display();
表示系统会按照默认规则自动定位模板文件,所以通常display方法无需带任何参数即可输出对应的模板,这是模板输出的最简单的用法。
如果没有按照模板定义规则来定义模板文件,或者我需要调用其他模块下面的某个模板,可以使用:
$this->display(edit);
表示调用当前模块下面的edit模板
$this->display(Member:read);
表示调用Member模块下面的read模板。
如果我们使用了模板主题功能,那么也可以支持跨主题调用,使用:
$this->display(theme:User:edit);
表示调用theme主题下面的User模块的edit模板。
这种方式的渲染输出不需要写模板文件的路径和后缀,确切地说,这里面的模块和操作并不一定需要有对应的模块或者操作,只是一个目录名称和文件名称而已,例如,你的项目里面可能根本没有Public模块,更没有Public模块的menu操作,但是一样可以使用
$this->display(Public:menu);
输出这个模板文件。理解了这个,模板输出就清晰了。
display方法支持在渲染输出的时候指定输出编码和类型,例如:
$this->display(read,utf-8,text/xml);
表示输出XML页面类型(配合你的应用需求可以输出很多类型)。
事情总有特例,如果模板目录是自定义的,或者根本不需要按模块进行分目录存放,那么默认的display渲染规则就不能处理,这个时候,我们就需要使用另外一种方式来应对,直接传入模板文件名即可,例如:
$this->display(./Public/menu.html);
这种方式需要指定模板路径和后缀,这里的Public目录是位于当前项目入口文件位置下面。如果是其他的后缀文件,也支持直接输出,例如:
$this->display(./Public/menu.tpl);
只要./Public/menu.tpl是一个实际存在的模板文件。
要注意模板文件位置是相对于项目的入口文件,而不是模板目录。
还有一种情况是,你需要获取渲染模板的输出内容,就可以使用fetch方法,fetch方法的用法和display基本一致,区别就在于fetch方法渲染后不是直接输出,而是返回渲染后的内容,例如:
$content=$this->fetch(Member:edit);
使用fetch方法获取渲染内容后,你可以进行过滤和替换等操作,用于对模板输出的复杂需求。
如果你没有定义任何模板文件,或者把模板内容存储到数据库中的话,你就需要使用show方法来渲染输出了,show方法的调用格式:
show(渲染内容[,字符编码][,输出类型])
例如,
$this->show($content);
也可以指定编码和类型:
$this->show($content,utf-8,text/xml);
show方法中的内容也可以支持模板解析。
三、模板赋值
我们知道了如何渲染模板输出,但是如果要在模板中输出变量,必须在在控制器中把变量传递给模板,提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。
$this->assign(name,$value);//下面的写法是等效的$this->name=$value;
assign方法必须在display和show方法之前调用,并且系统只会输出设定的变量,其它变量不会输出(系统变量可以通过特殊的标签输出,可以无需赋值模板变量),一定程度上保证了变量的安全性。
赋值后,就可以在模板文件中输出变量了,如果使用的是内置模板的话,就可以这样输出:
{$name}
如果要同时输出多个模板变量,可以使用下面的方式:
$array[name]=thinkphp;
$array[email]=liu21st@gmail.com;
$array[phone]=12335678;
$this->assign($array);
这样,就可以在模板文件中同时输出name、email和phone三个变量。
模板变量的输出根据不同的模板引擎有不同的方法,我们在后面会专门讲解内置模板引擎的用法。如果你使用的是PHP本身作为模板引擎的话,就可以直接在模板文件里面输出了:
<?php echo$name.[.$email..$phone.];?>
如果采用内置的模板引擎,可以使用:
{$name} [{$email}{$phone} ]
输出同样的内容。
关于更多的模板标签使用,我们会在后面模板标签中详细讲解。
四、模板替换
在进行模板输出之前,系统还可以对渲染的模板结果进行一些模板的特殊字符串替换操作,也就是实现了模板输出的替换和过滤。这个机制可以使得模板文件的定义更加方便,默认的替换规则有:
../Public:会被替换成当前项目的公共模板目录通常是/项目目录/Tpl/当前主题/Public/
__TMPL__:会替换成项目的模板目录通常是/项目目录/Tpl/当前主题/
(注:为了部署安全考虑,../Public和__TMPL__不再建议使用)
__PUBLIC__:会被替换成当前网站的公共目录通常是/Public/
__ROOT__:会替换成当前网站的地址(不含域名)
__APP__:会替换成当前项目的URL地址(不含域名)
__GROUP__:会替换成当前分组的URL地址(不含域名)
__URL__:会替换成当前模块的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址(不含域名)
__SELF__:会替换成当前的页面URL
注意这些特殊的字符串是严格区别大小写的,并且这些特殊字符串的替换规则是可以更改或者增加的,我们只需要在项目配置文件中配置TMPL_PARSE_STRING就可以完成。如果有相同的数组索引,就会更改系统的默认规则。例如:
TMPL_PARSE_STRING=>array(
__PUBLIC__=>/Common,//更改默认的/Public替换规则
__JS__=>/Public/JS/,//增加新的JS类库路径替换规则
/Uploads=>/Uploads,//增加新的上传路径替换规则
)
有了模板替换规则后,页面上所有的__PUBLIC__字符串都会被替换,那如果确实需要输出__PUBLIC__字符串到模板呢,我们可以通过增加替换规则的方式,例如:
TMPL_PARSE_STRING=>array(
--PUBLIC--=>__PUBLIC__,//采用新规则输出/Public字符串
)
这样增加替换规则后,如果我们要输出__PUBLIC__字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。
五、总结
通过本篇的学习,我们大概掌握了如何定义模板文件和进行模板渲染输出,以及如何赋值模板变量,后面我们将会学习如何在模板文件中使用标签来简化你的书写。
thinkphp3.2 怎么修改url的模式入口文件是应用的单一入口,对应用的所有请求都定向到应用入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作:
http://serverName/index.php/模块/控制器/操作
这是3.2版本的标准URL格式。
可以通过设置模块绑定或者域名部署等方式简化URL地址中的模块及控制器名称。
URL大小写ThinkPHP框架的URL是区分大小写(主要是针对模块、控制器和操作名,不包括应用参数)的,这一点非常关键,因为ThinkPHP的命名规范是采用驼峰法(首字母大写)的规则,而URL中的模块和控制器都是对应的文件,因此在Linux环境下面必然存在区分大小写的问题。
框架内置了一个配置参数用于解决URL大小写的问题,如下:
URL_CASE_INSENSITIVE=>true,
当URL_CASE_INSENSITIVE设置为true的时候表示URL地址不区分大小写,这个也是框架在部署模式下面的默认设置。
当开启调试模式的情况下,这个参数是false,因此你会发现在调试模式下面URL区分大小写的情况。
URL模式如果我们直接访问入口文件的话,由于URL中没有模块、控制器和操作,因此系统会访问默认模块(Home)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的:
http://serverName/index.phphttp://serverName/index.php/Home/Index/index
这种URL模式就是系统默认的PATHINFO模式,不同的URL模式获取模块和操作的方法不同,ThinkPHP支持的URL模式有四种:普通模式、PATHINFO、REWRITE和兼容模式,可以设置URL_MODEL参数改变URL模式。
URL模式
URL_MODEL设置
普通模式0
PATHINFO模式1
REWRITE模式2
兼容模式3
如果你整个应用下面的模块都是采用统一的URL模式,就可以在应用配置文件中设置URL模式,如果不同的模块需要设置不同的URL模式,则可以在模块配置文件中设置。
普通模式普通模式也就是传统的GET传参方式来指定当前访问的模块和操作,例如:
http://localhost/?m=home&c=user&a=login&var=value
m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数。
如果默认的变量设置和你的应用变量有冲突的话,你需要重新设置系统配置,例如改成下面的:
VAR_MODULE=>module,//默认模块获取变量VAR_CONTROLLER=>controller,//默认控制器获取变量VAR_ACTION=>action,//默认操作获取变量
上面的访问地址则变成:
http://localhost/?module=home&controller=user&action=login&var=value
注意,VAR_MODULE只能在应用配置文件中设置,其他参数可以则也可以在模块配置中设置
PATHINFO模式PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应上面的URL模式,PATHINFO模式下面的URL访问地址是:
http://localhost/index.php/home/user/login/var/value/
PATHINFO地址的前三个参数分别表示模块/控制器/操作。
不过,PATHINFO模式下面,依然可以采用普通URL模式的参数方式,例如:
http://localhost/index.php/home/user/login?var=value
依然是有效的
PATHINFO模式下面,URL是可定制的,例如,通过下面的配置:
//更改PATHINFO参数分隔符URL_PATHINFO_DEPR=>-,
我们还可以支持下面的URL访问:
http://localhost/index.php/home-user-login-var-valueREWRITE模式
REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。
如果是Apache则需要在入口文件的同级添加.htaccess文件,内容如下:
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php/$1[QSA,PT,L]</IfModule>
接下来,就可以用下面的URL地址访问了:http://localhost/home/user/login/var/value
更多环境的URL重写支持参考部署部分的URL重写。
兼容模式
兼容模式是用于不支持PATHINFO的特殊环境,URL地址是:http://localhost/?s=/home/user/login/var/value
可以更改兼容模式变量的名称定义,例如:
VAR_PATHINFO=>path
PATHINFO参数分隔符对兼容模式依然有效,例如:
//更改PATHINFO参数分隔符URL_PATHINFO_DEPR=>-,
使用以上配置的话,URL访问地址可以变成:http://localhost/?path=/home-user-login-var-value
兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。
例如,我们在Apache下面的话,.htaccess文件改成如下内容:
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php?s=/$1[QSA,PT,L]</IfModule>
就可以和REWRITE模式一样访问下面的URL地址访问了:http://localhost/home/user/login/var/value
好了,关于thinkphp获取当前域名和thinkphp3.2 怎么修改url的模式的问题到这里结束啦,希望可以解决您的问题哈!
本文链接:https://aiming.cc/index.php/post/2137.html 转载需授权!