服务器测评网
我们一直在努力
广告
广告
广告
广告
广告
广告

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,路由,多应用,跨应用
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/taihom/article/details/133950435

好主机测评广告位招租-300元/3月
赞(0) 打赏
未经允许不得转载:好主机测评网 » ThinkPHP在多应用模式下跨应用路由如何设置?
好主机测评广告位招租-200元/3月
好主机测评广告位招租-100元/3月

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫