2015-05-20 36 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//' ] ] ]这是它的外观的它不工作,因为它似乎我需要一键添加到阵列 –

相关问题