首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Yii2中,某些子域设置在哪里?

问在Yii2中,某些子域设置在哪里?
EN

Stack Overflow用户
提问于 2016-09-21 12:07:10
回答 2查看 525关注 0票数 1

我有网站的子域(news.site.com,events.site.com等)。我被添加到配置我的自定义url规则中,他们通过DB中被请求的url文章找到并调用了具有动作显示的项目控制器。

例如:我想用url = 'some-article-with-custom-url'在db文章中找到url = 'some-article-with-custom-url',并在ArticleController中调用actionShow()。

但是在news.site.com和events.site.com上,我想找到不同site_id的文章(列在db中)

news.site.com - select * from article where site_id = 1 ...

events.site.com - select * from article where site_id = 2 ...

,我可以在其中插入一些子域设置,如果在UrlManager级别上,我必须已经有了这个设置?

代码语言:javascript
复制
'urlManager' => [
  'rules' = [
    ...
    [
      'class' => 'common\components\ArticleUrlRule'
    ],
  ]
]

这个类的解析req的实现:

代码语言:javascript
复制
public function parseRequest($manager, $request) {
   $articleId = Article::getArticleIdByUrl($request->pathInfo);

   if ( !empty($articleId) ) {
        return [
            'article/show',
            [
                'id' => $articleId
            ]
        ];
    }

    return false;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-21 12:30:49

处理这个问题的最简单的方法,可能还有其他方法,从将每个子域定义为您的web服务器上的站点开始。正如您所注意到的,您可能有三个站点,一个主域和两个子域,另外两个web文件夹的副本分别命名为news and events,因此在Yii2项目根目录中,您将拥有web, events and news目录,它们将是web服务器上三个网站的三个文档根目录。

在每个web目录的index.php中,定义一个变量或常量来表示site id,以便在需要时在应用程序中使用它:

代码语言:javascript
复制
<?php

defined('SITE_ID') or define('SITE_ID', x); // where x is an integer  
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'prod');
...
票数 0
EN

Stack Overflow用户

发布于 2016-09-21 12:16:16

有几种方法可以做到这一点,从容易和无趣到硬和良好的结构。

我认为最好的方法是有一个URL配置:

代码语言:javascript
复制
'urlManager' => [
  'rules' = [
    [
      '<controller:[\w-]+>/<id:\d+>'=>'<controller>/view',
    ]
  ]
]

然后在你的ArticleController

代码语言:javascript
复制
public function actionShow($id)
{
  // This might be better as a definition list stored in config or something
  $site = null;
  $sub = Yii::$app->request->hostInfo; // Put some logic here to split out subdomain
  switch($sub){
    case 'site1':
      $site = 1;
  }
  $articleId = Article::find()->where(['id' => $id, 'site' => $site]);
}

差不多吧。它可以变得更强大,而且,总体来说,从那里开始更好,但我相信这是一个很好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39616153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档