記錄一次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中的模塊不太一樣),所以在路由定義的時候,應用叫什麼名字,路由文件夾下的子文件夾也應該叫什麼名字。