>  기사  >  php教程  >  ThinkPHP3.2의 하위 도메인 배포 및 라우팅 최적화에 대한 간략한 논의 (1)

ThinkPHP3.2의 하위 도메인 배포 및 라우팅 최적화에 대한 간략한 논의 (1)

WBOY
WBOY원래의
2016-12-05 13:26:271698검색

서문: 웹사이트 시스템 구축에는 PC 공식 웹사이트, 모바일 공식 웹사이트, 백엔드 관리 등 여러 하위 웹사이트가 포함되는 경우가 많습니다. ThinkPHP의 관점에서 보면 전체 아키텍처는 동일할 수 있습니다. Model(M)은 동일하다고 이해됩니다. Controller(C)에는 공유 API 부분과 비공유 부분이 포함되어 있지만 View는 전체 초기 아키텍처에서 주로 다음과 같은 측면을 고려할 수 있습니다.

공유 데이터베이스 구성, 애플리케이션 모듈 확장, 보기 폴더 사용자 정의, 하위 도메인 이름 배포, 라우팅 단순화....

구체적인 작업은 다음과 같습니다.

1. ThinkPHP 환경 및 데이터베이스 준비

a. 공식 웹사이트에서 ThinkPHP3.2 소스 코드 전체 버전을 다운로드하고 압축을 풀고 이름을 testWeb으로 지정하고 http://192.168.1.122/testWeb/을 방문하면 다음을 볼 수 있습니다.

배포에는 문제가 없다는 뜻입니다.

b. 테스트 데이터베이스 도서를 준비하고 새 도서 테이블(ID, 제목, 가격)을 생성하고 테스트 데이터를 준비합니다.

 

c. 구성 데이터베이스, ThinkPHP 구성 로딩 규칙을 참조하세요. 기존 구성(ThinkPHP/Conf/convention.php)을 애플리케이션 구성(Application/Common/Conf/config.php), 모듈 구성(Application)과 결합하여 사용할 수 있습니다. /현재 모듈 이름/Conf/config.php),

여기서는 애플리케이션 구성의 데이터베이스 구성을 사용합니다.

<span style="color: #008080"> 1</span>     <span style="color: #008000">//</span><span style="color: #008000">数据库配置信息</span>
<span style="color: #008080"> 2</span>     'DB_TYPE'   => 'mysql', <span style="color: #008000">//</span><span style="color: #008000"> 数据库类型</span>
<span style="color: #008080"> 3</span>     'DB_HOST'   => 'localhost', <span style="color: #008000">//</span><span style="color: #008000"> 服务器地址localhost</span>
<span style="color: #008080"> 4</span>     'DB_NAME'   => 'books', <span style="color: #008000">//</span><span style="color: #008000"> 数据库名</span>
<span style="color: #008080"> 5</span>     'DB_USER'   => 'root', <span style="color: #008000">//</span><span style="color: #008000"> 用户名</span>
<span style="color: #008080"> 6</span>     'DB_PWD'    => '', <span style="color: #008000">//</span><span style="color: #008000"> 密码</span>
<span style="color: #008080"> 7</span>     'DB_PORT'   => 3306, <span style="color: #008000">//</span><span style="color: #008000"> 端口</span>
<span style="color: #008080"> 8</span>     'DB_PREFIX' => '', <span style="color: #008000">//</span><span style="color: #008000"> 数据库表前缀</span>
<span style="color: #008080"> 9</span>     'DB_CHARSET'=> 'utf8', <span style="color: #008000">//</span><span style="color: #008000"> 字符集</span>
<span style="color: #008080">10</span>     'DB_DEBUG'  =>  <span style="color: #0000ff">TRUE</span>, <span style="color: #008000">//</span><span style="color: #008000"> 数据库调试模式 开启后可以记录SQL日志 3.2.3新增<br></span>
다음으로 기본 인덱스 컨트롤러에 작업을 추가합니다.

<span style="color: #008080">1</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span> get_book(<span style="color: #800080">$id</span><span style="color: #000000">){
</span><span style="color: #008080">2</span>         <span style="color: #800080">$param</span>['id'] = I('get.id'<span style="color: #000000">);
</span><span style="color: #008080">3</span>         <span style="color: #800080">$model</span> = M('book')->where(<span style="color: #800080">$param</span>)-><span style="color: #000000">find();
</span><span style="color: #008080">4</span>         <span style="color: #800080">$this</span>->ajaxReturn(<span style="color: #800080">$model</span><span style="color: #000000">);
</span><span style="color: #008080">5</span>     }
방문: http://192.168.1.122/testWeb/index.php/

Home/Index/get_book?id=1, json 데이터로 이동하여 데이터베이스 연결 및 액세스를 표시할 수 있습니다. 멀다 보통:

       

2. 애플리케이션 디렉토리에서 모듈을 확장합니다.

a. 현재 홈 모듈을 빠르게 복사하고 이름을 H5 모듈로 바꾸고 해당 컨트롤러의 네임스페이스를 다음과 같이 수정합니다. 네임스페이스 H5Controller,

방문: http://192.168.1.122/testWeb/index.php/

H5/Index/get_book?id=1 이때 데이터가 성공적으로 반환되어 현재 H5임을 나타냅니다. 모듈은 동일합니다.

관리 모듈을 만드세요.

3. 사용자 정의 보기 폴더

a. 뷰 개념: ThinkPHP는 MVC 구조를 기반으로 설계된 PHP 프레임워크로, 간단한 데이터베이스 작업의 경우 모듈 내 Model이 생략될 수 있으며, CURD 작업이 가능합니다. Controller만으로 완성되는 View 역시 매우 중요한 기능입니다. ThinkPHP의 뷰는 주로 템플릿 파일과 템플릿 엔진을 참조합니다. 템플릿 파일은 빌딩 블록 장난감의 기본 "작은 원본"으로 간단히 이해될 수 있으며, 이러한 "작은 원본"은 모양이 다를 수 있으며 각각의 "작은 원본"입니다. 모양은 빌딩 블록에 사용될 수 있습니다. 프로세스에서 하나 이상의 템플릿 엔진이 빌딩 블록 장난감에 "오목 및 볼록" 버클을 구축하여 "작은 원본"을 결합하는 규칙을 형성하는 것입니다.

b. 보기 사용법: 홈 모듈-색인 컨트롤러-책 작업을 추가하여 모든 책을 얻고 홈 모듈의 보기 폴더에 새 색인 폴더-새 책.html을 만듭니다.

<span style="color: #008080">1</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> book(){
</span><span style="color: #008080">2</span>     <span style="color: #800080">$models</span> = M('book')-><span style="color: #000000">select();
</span><span style="color: #008080">3</span>     <span style="color: #800080">$this</span>->assign('books',<span style="color: #800080">$models</span><span style="color: #000000">);
</span><span style="color: #008080">4</span>     <span style="color: #800080">$this</span>-><span style="color: #000000">display();
</span><span style="color: #008080">5</span> }
템플릿 파일:

<span style="color: #008080">1</span> <span style="color: #0000ff"><</span><span style="color: #800000">body</span><span style="color: #0000ff">></span>
<span style="color: #008080">2</span>     <span style="color: #0000ff"><</span><span style="color: #800000">volist </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="books"</span><span style="color: #ff0000"> id</span><span style="color: #0000ff">="vo"</span><span style="color: #0000ff">></span>
<span style="color: #008080">3</span>         <span style="color: #0000ff"><</span><span style="color: #800000">p</span><span style="color: #0000ff">></span>序号:{$vo.id}<span style="color: #0000ff"></</span><span style="color: #800000">p</span><span style="color: #0000ff">></span>
<span style="color: #008080">4</span>         <span style="color: #0000ff"><</span><span style="color: #800000">p</span><span style="color: #0000ff">></span>书名:{$vo.title}<span style="color: #0000ff"></</span><span style="color: #800000">p</span><span style="color: #0000ff">></span>
<span style="color: #008080">5</span>         <span style="color: #0000ff"><</span><span style="color: #800000">p </span><span style="color: #ff0000">style</span><span style="color: #0000ff">="color: #FF0000"</span><span style="color: #0000ff">></span>价格:{$vo.price}<span style="color: #0000ff"></</span><span style="color: #800000">p</span><span style="color: #0000ff">></span>
<span style="color: #008080">6</span>     <span style="color: #0000ff"></</span><span style="color: #800000">volist</span><span style="color: #0000ff">></span>
<span style="color: #008080">7</span> <span style="color: #0000ff"></</span><span style="color: #800000">body</span><span style="color: #0000ff">></span>

      c、 访问:http://192.168.1.122/testWeb/index.php/Home/Index/book,此时可以看到页面:

       此时,说明这个视图使用是正确的,但是同时也有一些不好的地方,如果模板文件多起来的时候,就不利于模板修改编辑(目录层次太深了),可以在模块配置中,定义当前模块默认的视图目录(Application/Home/Conf/config.php):

<code class="hljs bash"><span class="hljs-string"><span class="hljs-string"> <span class="cnblogs_code"><span style="color: #008080">define</span>('TMPL_PATH','./Public/PC/'); </span><br></span></span></code>

      类似定义H5、admin模块的视图目录,最终得到的目录组织,到此,就可以大概有几个不同的子网站的初步架构了。而对于网站的分类:二级菜单、三级菜单就可以分别对应控制器(Controller)和操作(action),根据视图模板构造动态的页面:

     

4、子域名部署,关于子域名的解析可以参考我之前的文章网站部署一级域名、二级域名、子域名

    a、主要修改一些相关配置:

<span style="color: #008080"> 1</span> <span style="color: #0000ff"><</span><span style="color: #800000">VirtualHost </span><span style="color: #ff0000">*:80</span><span style="color: #0000ff">></span>
<span style="color: #008080"> 2</span> <span style="color: #000000">    DocumentRoot "E:/wamp/www/testWeb/"
</span><span style="color: #008080"> 3</span> <span style="color: #000000">    ServerName  chqtest.com
</span><span style="color: #008080"> 4</span> <span style="color: #000000">    ServerAlias m.chqtest.com
</span><span style="color: #008080"> 5</span>     <span style="color: #0000ff"><</span><span style="color: #800000">Directory </span><span style="color: #ff0000">"E:/wamp/www/testWeb/"</span><span style="color: #0000ff">></span>
<span style="color: #008080"> 6</span> <span style="color: #000000">    Allow from all      
</span><span style="color: #008080"> 7</span>     <span style="color: #0000ff"></</span><span style="color: #800000">Directory</span><span style="color: #0000ff">></span>
<span style="color: #008080"> 8</span>     <span style="color: #0000ff"><</span><span style="color: #800000">IfModule </span><span style="color: #ff0000">dir_module</span><span style="color: #0000ff">></span>
<span style="color: #008080"> 9</span> <span style="color: #000000">       DirectoryIndex  mobile.php index.html index.htm default.php default.htm default.html
</span><span style="color: #008080">10</span>     <span style="color: #0000ff"></</span><span style="color: #800000">IfModule</span><span style="color: #0000ff">></span>
<span style="color: #008080">11</span> <span style="color: #0000ff"></</span><span style="color: #800000">VirtualHost</span><span style="color: #0000ff">></span>
<span style="color: #008080">12</span> 
<span style="color: #008080">13</span> <span style="color: #0000ff"><</span><span style="color: #800000">VirtualHost </span><span style="color: #ff0000">*:80</span><span style="color: #0000ff">></span>
<span style="color: #008080">14</span> <span style="color: #000000">    DocumentRoot "E:/wamp/www/testWeb/"
</span><span style="color: #008080">15</span> <span style="color: #000000">    ServerName  chqtest.com
</span><span style="color: #008080">16</span> <span style="color: #000000">    ServerAlias www.chqtest.com
</span><span style="color: #008080">17</span>     <span style="color: #0000ff"><</span><span style="color: #800000">Directory </span><span style="color: #ff0000">"E:/wamp/www/testWeb/"</span><span style="color: #0000ff">></span>
<span style="color: #008080">18</span> <span style="color: #000000">    Allow from all      
</span><span style="color: #008080">19</span>     <span style="color: #0000ff"></</span><span style="color: #800000">Directory</span><span style="color: #0000ff">></span>
<span style="color: #008080">20</span>     <span style="color: #0000ff"><</span><span style="color: #800000">IfModule </span><span style="color: #ff0000">dir_module</span><span style="color: #0000ff">></span>
<span style="color: #008080">21</span> <span style="color: #000000">       DirectoryIndex  index.php index.html index.htm default.php default.htm default.html
</span><span style="color: #008080">22</span>     <span style="color: #0000ff"></</span><span style="color: #800000">IfModule</span><span style="color: #0000ff">></span>
<span style="color: #008080">23</span> <span style="color: #0000ff"></</span><span style="color: #800000">VirtualHost</span><span style="color: #0000ff">></span>
<span style="color: #008080">24</span> 
<span style="color: #008080">25</span> <span style="color: #0000ff"><</span><span style="color: #800000">VirtualHost </span><span style="color: #ff0000">*:80</span><span style="color: #0000ff">></span>
<span style="color: #008080">26</span> <span style="color: #000000">    DocumentRoot "E:/wamp/www/testWeb/"
</span><span style="color: #008080">27</span> <span style="color: #000000">    ServerName  chqtest.com
</span><span style="color: #008080">28</span> <span style="color: #000000">    ServerAlias admin.chqtest.com
</span><span style="color: #008080">29</span>     <span style="color: #0000ff"><</span><span style="color: #800000">Directory </span><span style="color: #ff0000">"E:/wamp/www/testWeb/"</span><span style="color: #0000ff">></span>
<span style="color: #008080">30</span> <span style="color: #000000">    Allow from all      
</span><span style="color: #008080">31</span>     <span style="color: #0000ff"></</span><span style="color: #800000">Directory</span><span style="color: #0000ff">></span>
<span style="color: #008080">32</span>     <span style="color: #0000ff"><</span><span style="color: #800000">IfModule </span><span style="color: #ff0000">dir_module</span><span style="color: #0000ff">></span>
<span style="color: #008080">33</span> <span style="color: #000000">       DirectoryIndex  index.php index.html index.htm default.php default.htm default.html
</span><span style="color: #008080">34</span>     <span style="color: #0000ff"></</span><span style="color: #800000">IfModule</span><span style="color: #0000ff">></span>
<span style="color: #008080">35</span> <span style="color: #0000ff"></</span><span style="color: #800000">VirtualHost</span><span style="color: #0000ff">></span>

      此时,也就是说,有不同子域名(二级网站别名)www.chqtest.com   m.chqtest.com  admin.chqtest.com都可以直接访问到www/testWeb目录下,如http://www.chqtest.com/index.php/Home/Index/book,

      http://m.chqtest.com/index.php/Home/Index/book都是一样的,只是访问到Home模块下的书籍页面(改Home为H5也都指向手机端页面);

     b、那么如果要根据不同的子域名,直接绑定到不同的模块怎么办?参考ThinkPHP的域名部署,也就是在惯用配置下补充一些信息:

<span style="color: #008080"> 1</span>     'APP_SUB_DOMAIN_DEPLOY' =>  <span style="color: #0000ff">true</span>,   <span style="color: #008000">//</span><span style="color: #008000"> 是否开启子域名部署
</span><span style="color: #008080"> 2</span> <span style="color: #008000">    //完整域名部署</span>
<span style="color: #008080"> 3</span>     'APP_SUB_DOMAIN_RULES'    =>    <span style="color: #0000ff">array</span>( <span style="color: #008000">//</span><span style="color: #008000"> 子域名部署规则</span>
<span style="color: #008080"> 4</span>         'www.chqtest.com'  => 'Home',   <span style="color: #008000">//</span><span style="color: #008000"> www.chqtest.com域名指向Home模块</span>
<span style="color: #008080"> 5</span>         'm.chqtest.com'   => 'H5',
<span style="color: #008080"> 6</span>         'admin.chqtest.com' => 'Admin',
<span style="color: #008080"> 7</span>     ),
<span style="color: #008080"> 8</span>     'APP_DOMAIN_SUFFIX'     =>  '', <span style="color: #008000">//</span><span style="color: #008000"> 域名后缀 如果是com.cn net.cn 之类的后缀必须设置    </span>
<span style="color: #008080"> 9</span>     'ACTION_SUFFIX'         =>  '', <span style="color: #008000">//</span><span style="color: #008000"> 操作方法后缀</span>
<span style="color: #008080">10</span>     'MULTI_MODULE'          =>  <span style="color: #0000ff">true</span>, <span style="color: #008000">//</span><span style="color: #008000"> 是否允许多模块 如果为false 则必须设置 DEFAULT_MODULE</span>
<span style="color: #008080">11</span>     'MODULE_DENY_LIST'      =>  <span style="color: #0000ff">array</span>('Common','Runtime'),
<span style="color: #008080">12</span>     'MODULE_ALLOW_LIST'    =>    <span style="color: #0000ff">array</span>('Home','H5','Admin'), <span style="color: #008000">//</span><span style="color: #008000"> 允许访问的模块列表</span>

             再次访问http://www.chqtest.com/index.php/Home/Index/book,http://m.chqtest.com/index.php/Home/Index/book,会发现有以下错误:

    这是因为绑定子域名部署之后,index.php入口文件定位到Application应用目录之前,就已经根据不同的子域名,直接进入相应的目录里面了,这时Home就会被判断要查找的控制器,显然当前控制器只有Index,所以,重新访问:http://www.chqtest.com/index.php/Index/book,http://m.chqtest.com/index.php/Index/book,http://admin.chqtest.com/index.php/Index/book,是不是就都分别访问到相应模块下的操作并返回视图呢:

          

     这时,基本就可以搭建了一个大体的网站架构就进一步完善了些,从http://192.168.1.122/testWeb/index.php/H5/Index/book访问手机端书籍页面,到http://m.chqtest.com/index.php/Index/book是不是可以省略了一级资源目录和模块名了呢,

     整个结构也清晰了很多。下一篇,将继续说说ThinkPHP关于路由优化,PC、H5网站相互切换的技巧,有兴趣的可以留意下,关于这次例子可以参考Demo

 

    

 

 

 

 

 

        

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.