3

正確な言い方がわからないので、あらかじめお詫び申し上げます。私は少しユニークなセットアップをしていますが、同時にそれほどユニークではありません。欲しい

api.domain.com
m.domain.com
domain.com

すべて同じコードベースで動作しますが、異なるビューを提供し、異なるコントローラーセットで動作します。ただし、サブドメイン自体に固有のさまざまなディレクトリにコードベースのミラーコピーを作成して、コードベースを複製したくありません。私にとって、これは冗長であり、生産性の反対です。3つ以上のモデル、ライブラリ、場合によってはコントローラーを管理する必要があるからです。サービスのさまざまなバージョン間で機能を維持するため。

現在、私がセットアップして作業しているのは、routes.phpの絶え間ない成長によるものであり、通常のドメインを介してどのコントローラーが使用されるかを示す手段です。

すなわち

domain.com
domain.com/m/
domains.com/api/

これは今のところうまくいきますが、私はサービスの組織化と将来の開発に最適なものを考えようとしています。

したがって、私の質問はすべて、すべてを1つのメインコードベースに保持しながら、サブドメインを使用するというこのロジックをサポートするようにcodeigniterを設定するにはどうすればよいですか。これはもっともらしいですか?もしそうなら、それはどのように達成できますか?

4

2 に答える 2

3

さて、元の投稿にコメントを付けた後、スタック上の別の投稿を指して、問題を処理するための気の利いた方法を思いつきました。それは、論理に基づいた派生物以上のリンクで見つかった正確な答えではありません。複数のサブドメインがあるので、それぞれに独自の機能とニーズのセット、およびそれらのサブドメインからのみ呼び出される原因に固有のコントローラーを展開したいと思います。

そうは言っても、私の解決策は、それに遭遇する可能性のある人のために、routes.php私は小さな関数を作成して、HTTP_HOSTそれに基づいて分割し.、そこから私のニーズに使用することになりました。私の例は次のとおりです。

また、routes.phpのすべてを置き換えたので、直線だけではありません。$route['this/that'] = 'dir/controller';

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|   example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|   http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
|   $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|   $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/
function whichSubRoute()
{
    $subs = array(
                "api"=>"api/",
                "m"=>"m/"
                );

    $curr = $_SERVER['HTTP_HOST'];
    $curr = explode('.', $curr);
    if(array_key_exists($curr[0], $subs))
    {
        return array($curr[0], $subs[$curr[0]]);
    }
    return false;
}

//due to the the way this setup works, some controller references
//can be found multiple times (and in no particular order).
//also note due to this setup, each method has its own default and 404
$choiceRoute = whichSubRoute();
if($choiceRoute !== false)
{
    if($choiceRoute[0]=="api")
    {
        $route['default_controller'] = "welcome";
        $route['404_override'] = '';
        //start version 1 (mvp API)
        $route['1.0/user/(:any)'] = $choiceRoute[1].'v1_userinfo/index/$1';
        //controllers outside of "/api"
    }
    if($choiceRoute[0]=="m")
    {
        $route['default_controller'] = "welcome";
        $route['404_override'] = '';
        //start version 1 (mobile)
        $route['welcome']                   = $choiceRoute[1].'m_welcome';
        $route['dashboard']                 = $choiceRoute[1].'m_dashboard';
        $route['user/(:any)']               = $choiceRoute[1].'m_userinfo/index/$1';
        $route['reg']                       = 
        //controllers outside of "/m"
        $route['login/auth']                = 'login/auth';
        $route['logout/mobile']             = 'logout/mobile';
        //end version 1 (mobile)
    }
}
else
{
    $route['default_controller'] = "welcome";
    $route['404_override'] = '';
}
/* End of file routes.php */
/* Location: ./application/config/routes.php */

また、サブドメインごとにデフォルトのコントローラーと404コントローラーが必要であることも覚えておいてください。

于 2013-03-09T07:02:26.580 に答える
0

ENVIRONMENT定数に基づいてさまざまな構成をロードできると思います。

http://ellislab.com/codeigniter/user-guide/libraries/config.html

現在の環境に応じて、異なる構成ファイルをロードできます。ENVIRONMENT定数はindex.phpで定義されており、「環境の処理」セクションで詳細に説明されています。

環境固有の構成ファイルを作成するには、application / config / {ENVIRONMENT} /{FILENAME}.phpで構成ファイルを作成またはコピーします。

たとえば、本番専用のconfig.phpを作成するには、次のようにします。

ディレクトリapplication/config/production/を作成します。既存のconfig.phpを上記のディレクトリにコピーします。application/config/ Production / config.phpを編集して、本番環境の設定が含まれるようにします。

于 2013-09-15T16:01:55.553 に答える