thinkphp笔记-多应用模式

9694次阅读 247人点赞 作者: WuBin 发布时间: 2024-07-11 08:04:29
扫码到手机查看

多应用模式

单应用模式文件目录如下

 
www  WEB部署目录(或者子目录)
├─app           应用目录
│  ├─controller      控制器目录
│  ├─model           模型目录
│  ├─ ...            更多类库目录
│  │
│  ├─common.php         公共函数文件
│  └─event.php          事件定义文件
│
├─config                配置目录
│  ├─app.php            应用配置
│  ├─cache.php          缓存配置
│  ├─console.php        控制台配置
│  ├─cookie.php         Cookie配置
│  ├─database.php       数据库配置
│  ├─filesystem.php     文件磁盘配置
│  ├─lang.php           多语言配置
│  ├─log.php            日志配置
│  ├─middleware.php     中间件配置
│  ├─route.php          URL和路由配置
│  ├─session.php        Session配置
│  ├─trace.php          Trace配置
│  └─view.php           视图配置
│
├─view            视图目录
├─route                 路由定义目录
│  ├─route.php          路由定义文件
│  └─ ...   
│
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                Composer类库目录
├─.example.env          环境变量示例文件
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think  
————————————————
多应用模式可以用于一个应用的网站前台、后台、手机端、小程序等,集合在一个应用项目中。

由于多应用模式属于扩展,不是系统自带的,我们需要额外安装;

composer require topthink/think-multi-app

安装好后,会在vendor/topthink下,多了一个think-multi-app文件夹。其次就是在config/app.php中,多了如下内容

 // 应用映射(自动多应用模式有效)
    'app_map'          => [],
    // 域名绑定(自动多应用模式有效)
    'domain_bind'      => [],
    // 禁止URL访问的应用列表(自动多应用模式有效)
    'deny_app_list'    => [],

对之前的目录进行修改:

1、在app目录下新建index(网站前台首页),admin(网站后台首页)

2、将原本的app下的controller与model文件夹移动到index目录中

删除或移动原来app目录下面的controller文件夹,TP是根据是否有这个文件夹来判断单应用模式还是多应用模式的,所以这个必须删除或者移动到其他目录。tips:没个应用目录下都应该有各自的controller和model文件夹。

3、在admin下新建controller目录,并新建index.php文件,并输入下面内容

<?php
namespace app\admin\controller;

class Index 
{
    public function index()
    {
        return '后台首页';
    }
}

4、修改app/index目录中的控制器,修改里面的namespace:

比如app/index/controller里面有3个控制器文件:Index.php,Address.php,Show.php

比如原本Index.php中是这样

namespace app\controller;

现在要改为

namespace app\index\controller;

同理,其他的控制器中都要在app与controller之间加上文件夹名,这里是Index。

然后访问的时候:http://127.0.0.1:8000/index/address/read/id/10http://127.0.0.1:8000/index/,同理,进入后台:http://127.0.0.1:8000/admin

5、涉及到加载模板的,单应用模式里面,模板都存放在根目录下的view文件夹中,默认规则是view/控制器名称/模板文件,

比如,view/show/index.html,其对应的config/view.php中的设置

// 模板目录名
'view_dir_name' => 'view',

以app/index/controller/Show.php中的index方法为例,加载一个模板

public function index()
{
        View::assign([
            'name' => 'wubin',
            'email' => 'ww@163.com'
        ]);
        return View::fetch('index', [
            'name' => 'wubin',
            'email' => 'ww@163.com'
        ]);
}

而到了多应用模式,其目录规则是view/应用名/控制器名/模板文件,并且对应的设置也要改改,否则会提示找不到模板文件

// 模板目录名
'view_dir_name' => 'app\view',

目录规则

|-view
        |-index  应用1
       |-code
            |-public
       |-page
            |-...
     |-admin 应用2
            |-...

6、最终的目录如下所示

tp6----------
    |- app
            |-admin
           |-controller
                        |-index.php
       |-index
                  |-controller
           |-model
                  |-route
              |-app.php
           |-common
        ...
    |-view
           |-index
            |-code
                    |-public
            |-page
                    |-...
       |-admin
                    |-...

默认的应用为index,在config/app.php 修改即可;

// 默认应用
'default_app'      => 'admin',

如果改为admin,那么访问http://127.0.0.1:8000/的时候,会显示http://127.0.0.1:8000/admin/index的页面,默认为Index,指的是默认访问app/index/controller/Index.php的index方法。

我们可以做应用映射,比如将admin 目录映射为think,admin 废弃;

// 应用映射(自动多应用模式有效)
'app_map' => [
   'think' => 'admin'
],

那么可以通过http://127.0.0.1:8000/think/index去访问原来的admin。

我们也可以做域名绑定,比如,后台用域名绑定,直接访问;比如我做了一个二级域名,专门用于访问后台,而顶级域名访问的是前台,

// 域名绑定(自动多应用模式有效)
'domain_bind' => [
          'news.abc.com' => 'admin',
           '*' => 'index'
],

'*'=>'index' 指泛指,除了指定的,那么访问其他的都是直接访问到前台的Index

路由修改:需要在应用目录单独建立路由,内部编码不需要更改;

比如在单应用下,是统一在route/app.php中注册路由

Route::rule('ar/:id', 'Address/read');

比如上面一条路由,在多应用模式下,会提示:控制器不存在:app\controller\Address

这时候需要在应用目录下新建一个route/app.php

|-index
            |-controller
       |-model
            |-route
           |-app.php

在app.php中

use think\facade\Route;
Route::rule('ar/:id', 'Address/read');

// \think\facade\Route::rule('ar/:id', 'Address/read');

访问路由:http://localhost:8000/index/ar/5

注意,路由前要带有应用的目录名,否则会报错!

相关资料

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:thinkphp
推荐阅读
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    9352次阅读 603人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • Vue

    盘点Vue2和Vue3的10种组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。

    4072次阅读 302人点赞 发布时间: 2022-08-19 09:40:16 立即查看
  • JS

    几个高级前端常用的API

    推荐4个前端开发中常用的高端API,分别是MutationObserver、IntersectionObserver、getComputedstyle、getBoundingClientRect、requ...

    14279次阅读 934人点赞 发布时间: 2021-11-11 09:39:54 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    13219次阅读 462人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    11801次阅读 943人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    15974次阅读 1273人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    15018次阅读 1223人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    29429次阅读 2309人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    25377次阅读 1954人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录