2013-03-19 16:50:46  浏览:1985

cakephp

    有时候,几个网站做法都一样,只是显示有一点区别,新建一个项目呢,又有些重复代码,维护起来也有些麻烦,

所以,想到了用多域名绑定到cakePlugin下,这样就可以共用很多代码,只需要写不同的地方。

默认的域名不需要在core.php中配置

效果如下图:

 

首先在core.php(appConfigcore.php)中,定义域名所指向的目录

(备注:由于之前,请求不同插件下的IndexController,容易传位,所以这里设置默认请求controller)

Configure::write ( 'webdomain', array(

"exam.com"=>array(

    "plugns"=>"Exam",
    "controller"=>"ExamIndex"),

"cloud.com"=>array( "plugns"=>"Exam",
    "controller"=>"ExamIndex")

) 

);

 

然后在启动的时候,动态设置访问的目录

修改libCakeRoutingDispatcher.php

中的dispatch方法

在这一句$controller = $this->_getController($request, $response);之前加

 

$hosts = strtolower(env('HTTP_HOST'));

$domains=Configure::read('webdomain');   if(key_exists($hosts,$domains)){    if(empty($request->params['plugin'])){     $request->params['plugin']=$domains[$hosts]["plugns"];    } //index是我在routes.php中,定义的默认请求控制器,在这里,如果是默认的,就替换为config中定义的控制器  if(!empty($request->params['controller']) && $request->params['controller']=="index"){     $request->params['controller']=$domains[$hosts]["controller"];    }   }

 

 

这样就是根据域名,动态改变$request->params['plugin']值

最重要的,需要引入这个插件

引入:appConfigootstrap.php中加上

CakePlugin::load ( 'Exam', array (

'routes' => true 

) );


当访问exam.com的时候,自动访问Plugin/exam下的内容,这里面的控制器或者component是可以访问其他model或者插件下的内容


返回首页