我有一个具有不同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