我有一個具有不同API的域。我需要能夠調用這樣的事情在Yii2中使用不同的控制器文件夾
http://www.mydomain.xx/api1/v1/controller/action
http://www.mydomain.xx/api2/v1/controller/action
我使用nginx的,我映射根到/ var/WWW/MyApp的/ WEB和我一起有API的文件夾後端有一個前端文件夾,與web文件夾平行。
如何在不創建不同映射的子domanis的情況下訪問它們?
我有一個具有不同API的域。我需要能夠調用這樣的事情在Yii2中使用不同的控制器文件夾
http://www.mydomain.xx/api1/v1/controller/action
http://www.mydomain.xx/api2/v1/controller/action
我使用nginx的,我映射根到/ var/WWW/MyApp的/ WEB和我一起有API的文件夾後端有一個前端文件夾,與web文件夾平行。
如何在不創建不同映射的子domanis的情況下訪問它們?
要將其寫成解決方案:您可以使用full URL in the route。
[
'http://www.mydomain.xx/api1/v1/<controller>/<action>' => 'api1module/<controller>/<action>',
'http://www.mydomain.xx/api2/v1/<controller>/<action>' => 'api2module/<controller>/<action>',
]
這假設您將包含的API定義爲單獨的模塊。
每您的評論:
如果您正在使用不同的領域可能是很方便的設置一個變量在你的配置文件,並使用:
$domain = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'http://www.mydomain.xx/';
然後你就可以提取更多的變量以及可能:
[
"$domain/<api:(api1|api2)>/<version>/<controller>/<action>' => '<controller>/<action>',
]
在你的控制器,你可以獲取API類型和版本:
public function actionApiAction($api, $version)
{
// ...
}
可能性足夠,取決於你想要什麼。
['http://'.$_SERVER ['HTTP_HOST']。'/ api1/
除非是模塊名稱,否則您的值中不能包含3個部分,因此'
'urlManager '=> [ 'enablePrettyUrl'=>真, 'showScriptName'=>假, '規則'=> [ [ [ 的 'http:。//'.$_SERVER [' HTTP_HOST']'/ API/V1/
yii路由也可以包含完整的url,而不僅僅是控制器/操作。 – Blizz