thinkphp获取当前域名(thinkphp3.2 怎么修改url的模式)
大家好,关于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的模式的问题到这里结束啦,希望可以解决您的问题哈!