thinkphp如何绑定二级域名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp如何绑定二级域名相关的知识,希望对你有一定的参考价值。

官方给出的教程:
'APP_GROUP_LIST' => 'Home,Test,Admin',
'DEFAULT_GROUP' =>'Home',
'APP_SUB_DOMAIN_DEPLOY'=>1, // 开启子域名配置
/*子域名配置
*格式如: '子域名'=>array('分组名/[模块名]','var1=a&var2=b');
*/
'APP_SUB_DOMAIN_RULES'=>array(
'admin'=>array('Admin/'), // admin域名指向Admin分组
'test'=>array('Test/'), // test域名指向Test分组
),
我想知道如果不是独立的服务器,在虚拟主机上能实现子域名访问某个分组的模块吗?

先在根目录创建一个手机目录,名称随意,再创建一个手机模块

手机目录里面有个新的index.php入口文件,内容如下

定义一个define绑定到手机模块中,这样就行了,至于页面跳转用js跳转到:域名/mobile,或者直接绑定二级域名到根目录下的mobile文件夹即可

参考技术A 建议你可以写两个入口文件,把二级域名的路径指向新的入口文件就可以了 参考技术B apache 虚拟主机 配置一下 参考技术C top域名吗

视频学习笔录---ThinkPHP---thinkphp视图

(1)什么是视图?

MVC中的V(view),主要负责信息的输出展示

(2)视图的创建?

创建位置:分组目录Home下的View目录下指定的控制器名目录中,然后将模板绑定到控制器的方法中,一个公共控制器中可以绑定多个模板

注意:位置问题,控制器同名

①位置是view下与控制器同名的目录中;view下一级目录为控制器,二级目录为方法(对应的模板文件)

②如果有多个模板文件,则按照上面要求进行创建

(3)视图的展示?

在smarty中展示模板用的display方法,在ThinkPHP里同样是display方法

display在ThinkPHP中的3种语法格式:

①$this->display();                                                                                       展示当前控制器下与当前请求方法名一致的模板文件

②$this->display(模板文件名--不带后缀);                                                    展示当前控制器下指定模板文件

③$this->display(view目录下目录名/模板文件名--不带后缀);                      展示指定控制器下的指定模板文件

案例:

<?php
    namespace Admin\controller;
    use Think\Controller;
    class TestController extends Controller{
        public function test1(){
            $this->display(‘Person/person‘);//显示Person下person.html模板
        }
    }
?>

(4)变量分配

将变量从控制器的方法里传递到模板中展示的过程即为变量分配

在ThinkPHP中系统封装好了一个变量的分配方法,在smarty中用assign,在ThinkPHP里也是assign(分配)

语法:$this->assign(‘模板中变量名‘,$php中的变量名);

<?php
    namespace Admin\controller;
    use Think\Controller;
    class TestController extends Controller{
        public function test1(){
            //不写date()的第二个参数,则默认为当前时间
            $time = date(‘Y-m-d h:i:s‘,time());
            $this->assign(‘time‘,$time);//变量的传递,接下来是模板文件数据展示
            $this->display();
        }
    }
?>

接下来是数据的展示

在smarty里展示变量,写在标记里{!-- --}。在ThinkPHP里,默认的展示变量方法与smarty类似,{$模板中变量名}

<!DOCTYPE html>
<html>
<head>
    <title>test1</title>
</head>
<body>
<p>
    现在时间是:{$time}
</p>
</body>
</html>

注意:①模板展示放在变量分配后,否则无法展示变量;②一般情况下两个参数的变量名是一样的,方便查找

(5)变量分隔符

ThinkPHP默认变量分隔符为{},可以在配置文件ThinkPHP/Conf/convertion.php里找到配置项

 // 布局设置
    ‘TMPL_L_DELIM‘          =>  ‘{‘,            // 模板引擎普通标签开始标记
    ‘TMPL_R_DELIM‘          =>  ‘}‘,            // 模板引擎普通标签结束标记

左右标记可以通过配置项修改,例如将左标记符改为],则在模板里的变量需要改为[$time}

(6)模板常量替换机制

①由来:实际开发中,在引入css、js、图片等文件时,往往需要些一些复杂的路径。这时可以考虑用模板常量替换机制,将复杂路径简单化

②ThinkPHP里系统默认提供了一下几个常用的模板常量(因为是模板常量,所以只能在模板中使用,不能在控制器里使用)

__MODULE__:(模块/组件),输出到分组,表示从域名后开始到分组名结束的路由。/index.php/Admin

__CONTROLLER__:(控制),输出到控制器,/index.php/Admin/Test

__ACTION__:(方法),输出到方法,/index.php/Admin/Test/test1

__PUBLIC__:表示从域名后开始找,站点根目录下Public目录路由,/public

__SELF__:当前路由,从域名后开始到路由结束,与__ACTION__区别:/index.php/Admin/Test/test1/id=10,具体输出不同。当没有参数时,__SELF__和__ACTION__相同

③模板常量来源?

这里模板常量是通过模板内容替换机制来实现的,并非是常量的定义。所以模板常量并非是常量,而是字符串。

替换机制可以查看行为文件ThinkPHP/Library/Behavior/ContentReplace.Behaviour.class.php

拓展:查看后即可得出行为文件命名,文件名.Behaviour.class.php。

/**
     * 模板内容替换
     * @access protected
     * @param string $content 模板内容
     * @return string
     */
    protected function templateContentReplace($content) {
        // 系统默认的特殊变量替换
        $replace =  array(
            ‘__ROOT__‘      =>  __ROOT__,       // 当前网站地址
            ‘__APP__‘       =>  __APP__,        // 当前应用地址
            ‘__MODULE__‘    =>  __MODULE__,
            ‘__ACTION__‘    =>  __ACTION__,     // 当前操作地址
            ‘__SELF__‘      =>  htmlentities(__SELF__),       // 当前页面地址
            ‘__CONTROLLER__‘=>  __CONTROLLER__,
            ‘__URL__‘       =>  __CONTROLLER__,
            ‘__PUBLIC__‘    =>  __ROOT__.‘/Public‘,// 站点公共目录
        );
        // 允许用户自定义模板的字符串替换注意:行为文件是系统自带的,一般不建议去改动
        if(is_array(C(‘TMPL_PARSE_STRING‘)) )
            $replace =  array_merge($replace,C(‘TMPL_PARSE_STRING‘));
        $content = str_replace(array_keys($replace),array_values($replace),$content);//这步便是通过模板内容替换机制str_replace
        return $content;

 其模板常量的核心就是字符串的替换str_replace

④自定义模板常量

为了后期使用方便,可以在配置文件里定义一个自定义的模板常量

配置项为TMPL_PARSE_STRING

注意:开发时尽量不要修改系统配置文件,因为系统配置文件的作用范围十分广泛。可以将需要修改的配置项,在分组、应用级别的配置文件里去定义,不要直接在系统文件里修改。

例如:放到应用配置文件Common/Conf/config.php

<?php
return array(
    //‘配置项‘=>‘配置值‘
    //模板常量
    ‘TMPL_PARSE_STRING‘ => array(
        // __ROOT__.‘/Public‘站点公共目录,即根目录下public
        ‘__ADMIN__‘ => __ROOT__.‘/Public/Admin‘, //定义好之后,可以通过__ADMIN__来访问静态资源路径
    )
);

验证:模板输入__ADMIN__来验证,输出结果为/Public/Admin,表示验证成功

 

以上是关于thinkphp如何绑定二级域名的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp 二级域名绑定模块,导致设置的路由被多域名共用的问题解决方案

THinkPHP 5.0 域名路由

thinkphp 3.2. iis下怎么 多域名部署

php如何获取当前二级域名

thinkphp 域名部署

thinkphp如何获取二级域名前缀然后跳转到其他的后缀