LoginSignup
14
14

More than 5 years have passed since last update.

FuelPHP リソースを共通化して複数サイトを構築する

Last updated at Posted at 2015-08-07

※ 追記
この記事を書いてからしばらくして、単純に model だけであれば一方を主として他方から include() すればOKということに気づきました。

app_admin/classes/model/modalname.php
<?php
include (dirname(dirname(dirname(dirname(__FILE__)))) . '/app/classes/model/modalname.php'); 

追記ここまで※

この記事の趣旨

FuelPHP で複数サイトを作る場合、通常は fuel/app レベルで分かれて、fuel/app, fuel/app_admin ... のようになってしまうので、下層の Model等のファイル類が冗長になります。全く別のサイトであれば問題無いのですが、フロントサイトと管理サイトなど同じサービスにいくつかの顔を作ってそれぞれにドメインをあてる場合などに問題となります。調べると、Modelのディレクトリをシンボリックリンクで共有するなどの方法が知られているようですが、各環境の構築手順が重たくなります。

今回は routes.php をサイト毎に切り換える形で抜本的に対応し、個人的には文句のない快適な状態になりました。
以下に例として、構築中のフロントサイトに別ドメインの管理サイトを共存させる方法を挙げます。

手順

1. public ディレクトリをサイト数分作成する。
/public をコピーして /public_admin を作成します。

2. ウェブサーバでサイトの定義をする
http://example.com のドキュメントルートを /public
http://example-admin.com のドキュメントルートを /public_admin
と設定します。

3. ドキュメントルート直下の index.php に定数 ROUTS_FILENAME を定義する

public/index.php
define('ROUTS_FILENAME', 'routes.front.php');
public_admin/index.php
define('ROUTS_FILENAME', 'routes.admin.php');

4. サイト毎の routes.php を作成する

app/config/routes.front.php
<?php
// フロントサイト用の routes.php 
return array(
    '_root_'  => 'index',  // The default route
    '_404_'   => 'index/404',    // The main 404 route

    'admin(.*)'  => 'index/404',  // controller_admin へのアクセスを防ぐ
);
app/config/routes.front.php
<?php
// 管理サイト用の routes.php
return array(
    '_root_'  => 'admin/index',  // The default route
    '_404_'   => 'admin/404',    // The main 404 route

    '(.+)' => 'admin/$1'   // すべて controller_admin 以下にアクセスする
);

5. 本来の routes.php では4で作ったファイルを読むように記載する

<?php
return include ROUTS_FILENAME;

6. コントローラ等を実装する
http://example.com にアクセスすると app/classes/controller/index.php が使われ
http://example-admin.com にアクセスすると app/classes/controller/admin.php が使われます。

注意点

controller が共通なので切り分けはきっちりするべきです。例ではフロントサイトでいかなるURLにアクセスしても管理用のコントローラーに繋がらないようにしています。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14