ThinkPHP6.0 多應用模式版本路由

記錄一次ThinkPHP6.0的路由坑。下面是多應用模式版本路由解決方法。(開啓多應用的方式參考官方手冊,這裏不贅述)

當前版本爲thinkphp6.0 RC4

Apache的配置文件需要配置,當前我用的phpstudy 2018,PHP7.1

在phpstudy的Apache下,需要修改項目根目錄下的/public/.htaccess

具體配置如下

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

這時候用普通訪問模式,就可以正常訪問到控制器的方法了。但是在路由模式下還是不能訪問到。

 

在ThinkPHP5.1的時候,版本寫到路由裏還能直接寫成如下格式

Route::get('api/:version/home','api/:version.Index/home');

而在ThinkPHP6.0卻不行了。

 

現在需要新建一個目錄,結構類似下圖

在app下新建一個api應用,裏面有一個controller,下面有一個v1版本的文件夾,裏面是一個Index控制器

Index控制器裏的代碼如下,一定要注意命名空間後面有一個v1

<?php

namespace app\api\controller\v1;

use app\BaseController;

class Index extends BaseController
{
    public function home()
    {
        return '這裏是v1版本';
    }
}

要使用路由則還需要在route路由文件夾下創建一個api文件夾,下面是一個route.php的路由文件

如下圖

route.php裏面寫入代碼

<?php
/**
 * Created by 九城.
 * Author: 九城
 * QQ : 940993208
 *
 * Date: 2019/9/5
 * Time: 17:08
 */

use think\facade\Route;

Route::get(":version/home",'api/:version.Index/home');

到此,可以用postman或者瀏覽器訪問一下。我目前是建了一個虛擬域名,可以忽略。

如下圖就成功的輸出了控制器中的字符串

最後說明一下就是thinkphp6訪問路由的方式略有改變,我用之前thinkphp5的思想去寫代碼的時候一直訪問失敗。

thinkphp6是以應用的方式去劃分的(這個和thinkphp5中的模塊不太一樣),所以在路由定義的時候,應用叫什麼名字,路由文件夾下的子文件夾也應該叫什麼名字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章