2015-05-20 35 views
0

我有一個具有不同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的情況下訪問它們?

+0

yii路由也可以包含完整的url,而不僅僅是控制器/操作。 – Blizz

回答

0

要將其寫成解決方案:您可以使用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) 
{ 
    // ... 
} 

可能性足夠,取決於你想要什麼。

+0

['http://'.$_SERVER ['HTTP_HOST']。'/ api1///'=>'//',]我將其更改爲此,但我無法確定如何將這個配置數組添加到規則數組中,它似乎希望某種類型的鍵(如'controller'或'suffix'),您能否提供包含此規則數組的配置? –

+0

除非是模塊名稱,否則您的值中不能包含3個部分,因此'//'不是有效的路線。只需使用'/'。 ''(如果你需要的話)''_GET'將通過'\ Yii :: $ app-> request-> get('version')'或者作爲你的動作函數的參數 – Blizz

+0

'urlManager '=> [ 'enablePrettyUrl'=>真, 'showScriptName'=>假, '規則'=> [ [ [ 的 'http:。//'.$_SERVER [' HTTP_HOST']'/ API/V1//'=> 'API/V1//' ] ] ]這是它的外觀的它不工作,因爲它似乎我需要一鍵添加到陣列 –

相關問題