ThinkPHP在多应用模式下跨应用路由如何设置?

在ThinkPHP(ThinkPHP5.*、ThinkPHP6.*、ThinkPHP8)中,
您可以在根目录route/app.php下注册一个路由,实现网址根目录下缩短应用访问的地址,
例如:

Route::rule('login','Index/login');

在单应用下,通过 xxx.domain.com/login 这个网址,
的确是可以访问到和 xxx.domain.com/lndex/login 一样的结果,
这里的路由设置是没问题的

但是在多应用模式下,这个路由设置就不行了,会提示:
控制器不存在:app\controller\Index

因为在多应用模式下,
正确的控制器应该是 :app\index\controller\Index

而在ThinkPHP的官方文档中,里面提到的设置均是在当前应用下的设置

那么在多应用模式下,应该如何设置路由可以实现呢?

在官方文档的路由说明中,有这么一段

路由到类的方法

这种方式的路由可以支持执行任何类的方法,而不局限于执行控制器的操作方法。

路由地址的格式为(动态方法):

\完整类名@方法名

或者(静态方法)

\完整类名::方法名

例如:

Route::get('blog/:id','\app\index\service\Blog@read');

执行的是 \app\index\service\Blog类的read方法。
也支持执行某个静态方法,例如:

Route::get('blog/:id','\app\index\service\Blog::read');

方法的确是没错,在单应用下应没问题,

但是如果变成多应用,且使用的是根目录route/app.php下注册的路由,

但实际测试的确还是存在问题的!主要是报模板不存在!

导致出现这种情况的原因,是在根目录route/app.php下注册的路由进行解析时,app()这个系统函数的应用名称、控制器、操作可能都是空的

解决方法有两个:

第一个,使用路由到类的方法之前,给app() 全局指定应用、控制器、操作,例如:

#指定一个应用
app()->http->name('index');
#指定控制器和操作
app()->request->setController('Login')->setAction('index');
#\完整类名@方法名
Route::rule('login', '\app\index\controller\Login@index');

上面就是在地址栏访问 login 可以实现访问到 index(应用)/Login(控制器)/index(操作)

第二个,给app() 全局指定一个应用,并且设置好这个应用的命名空间,例如:

#访问 应用/控制器/操作
#指定一个应用
app()->http->name('index'); #应用
#设置指定应用的命名空间
app()->setNamespace('app\index'); #应用的命名空间
#\完整类名@方法名
Route::rule('login', 'login/index'); #路由 => 控制器/操作

这里也可以实现在地址栏访问 login 可以实现访问到 index(应用)/Login(控制器)/index(操作) 

这样就可以实现跨应用路由了

关键词:ThinkPHP5.X,6.X,8.X,路由,多应用,跨应用

ThinkPHP 6 中,多应用模式(Multi-app Mode)允许你在单个服务器上部署多个独立的应用。以下是设置和配置多应用模式的基本步骤: 1. **创建应用目录**:在 ThinkPHP 根目录下(通常是 `public`),创建一个与应用名称相同的子目录,例如 `admin`, `api` 等。 2. **修改入口文件**:在每个应用的根目录下,找到 `index.php` 文件。默认情况下,它会加载根目录的 `start.php`。你需要将入口文件指向各自应用的 `start.php`,如: - 对于 `admin` 应用: ```php // index.php (替换为实际路径) require_once __DIR__ . '/start.php'; ``` 3. **配置文件区分**:在 `start.php` 文件中,分别创建并配置每个应用的 `App` 和 `Config` 实例。为每个应用设置独立的配置项,例如数据库、路由等。 4. **URL 规则**:在 `route.php` 或者 `router.php` 中,为每个应用定义特定的 URL 路由前缀。例如,对于 `admin` 应用,可以使用 `/admin` 作为前缀。 5. **访问权限控制**:可以根据应用的特性和需求,使用 ThinkPHP 内置的权限系统或者第三方库对每个应用进行独立授权。 6. **域名绑定**:如果有多台服务器,可以在 DNS 解析中为每个应用分配一个独立的域名或子域,然后根据域名解析到对应的服务器和应用目录。 7. **启用多应用模式**:在 `common/config/app.php` 文件中,在 `'mode'` 字段下,设置 `'type' => 'multi',` 表示启用多应用模式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值