thinkphp获取当前域名(thinkphp3.2 怎么修改url的模式)

8678008682024-03-29 14:00:2548域名知识

大家好,关于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之类的后缀必须设置

thinkphp获取当前域名(thinkphp3.2 怎么修改url的模式)

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新增

thinkphp获取当前域名(thinkphp3.2 怎么修改url的模式)

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 转载需授权!

分享到:
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!