FuelPHPを一つのサイトで複数使いたい

例えば、既存サイトにFuelPHPをいれて、しばらくしてから別ディレクトリでもFuelPHPを使う必要が出てきたとき。

作成日:2018-02-28, 更新日:2018-08-10

やりたいこと:app以外は使い回したい

参照:一つのサイトでFuelPHPを複数使う(簡略版)

▼経緯
既存サイトにFuelPHPをいれて、しばらくしてから別ディレクトリでもFuelPHPを使う必要が出てきた。
他にも「FuelPHPを使っていたら、別ドメインで基本は同じだけど微妙に違うFuelPHPが必要になった」など。
※将来的には・・・「コントローラ、ビューのみ別にしたい。モデルや/app/configなども使い回したい」。
▼希望
・core、packagesディレクトリは使い回したい

手順の概要

・publicディレクトリを複製
・publicディレクトリ内の「index.php」で「APPPATH」だけ変更
・FuelPHPのappを複製

▼ファイル構成は下記のような感じ

  • 元のpublic
  • 元のFuelPHP本体
  • 増やしたpublic
  • 増やしたFuelPHP本体(appのみ)

手順

▼元のファイルの構成

  • /home
    • /fuelphp
    • /htdocs
      • /user ← 「/home/fuelphp」を読み込んでいる

▼修正後のファイルの構成

  • /home
    • /fuelphp
    • /fuelphp_admin ← 追加
    • /htdocs
      • /user - 「/home/fuelphp」を読み込んでいる
      • /admin ← 追加:「app」のみ「/home/fuelphp_admin」を読み込む

▼手順
1.「/home/fuelphp」を複製して「/home/fuelphp_admin」を作成(「/app」と「.htaccess」をコピー)
2.「/home/htdocs/user」を複製して「/home/htdocs/admin」を作成
3.「/home/htdocs/admin/index.php」の「define('APPPATH', 〇〇〇)」を「/home/fuelphp_admin/app」を読むように修正
4.「/home/fuelphp_admin」のコントローラーやビューを修正して確認。

「app」の中の一部も使い回す1

「app」の中にある下記も共通で使い回したい。

・app/classes/model
・app/config
・app/lang

コイツらをシンボリックリンクを貼ってやればOK

「app」の中の一部も使い回す2

パッケージ化して使い回す方法もある。

参照:FuelPHP 共通部分をパッケージ化して使い回す

「app」の中の一部も使い回す3

使いたいファイルでインクルードさせるという方法もある。

「元:/home/fuelphp/app/classes/util/common.php」を使いたい場合

▼「/home/fuelphp_admin/app/classes/util/common.php」

<?php
include_once ('〇〇〇/classes/util/common.php');

上記の「〇〇〇」の記述が面倒な場合「/home/htdocs/admin/index.php」で「define()」させておくというのもアリ。

▼「/home/htdocs/admin/index.php」

略

define('APPPATH',    realpath(__DIR__.'/../../fuelphp/app/')      .DIRECTORY_SEPARATOR);
define('APPCOMPATH', realpath(__DIR__.'/../../fuelphp_admin/app/').DIRECTORY_SEPARATOR);

略

▼「/home/fuelphp_admin/app/classes/util/common.php」

<?php
include_once (APPCOMPATH . '/classes/util/common.php');

「app」の中の一部も使い回す4

使いたいファイルでインクルードさせるのが面倒・・・。

▼「/home/fuelphp_admin/app/bootstap.php」でクラスの追加

略

\Autoloader::add_classes(array(
    'Util_Init' => APPCOMPATH.'classes/util/init.php', // クラス名とファイル名の記述を設定する。
));

略

※記述する場所を考えるのが面倒なので・・・「Autoloader::register()」の下に記述してみた。
※「/home/fuelphp/app/classes/util/init.php」を使う場合。

この場合「/home/fuelphp_admin/app/classes/util/init.php」が作れなくなるので注意が必要。
※「/home/fuelphp/app/classes/util/init.php」とクラス名が重複してしまう。

一つのFuelPHPを複数のドメインで運用

現状、まだ必要になっていないので試しておらず・・・メモだけ。
※ドメインじゃないけど基本は同じ→「FuelPHPでサービス実装後に別サービス追加

方法としては「routes.php」で切り分ける。

下記の2ドメインで運用。
・http://xxxx
・http://yyyy

▼ファイルの構成

  • /home
    • /fuelphp
    • /htdocs
      • /xxxx - 「http://xxxx」を割り当て
      • /yyyy - 「http://yyyy」を割り当て

▼手順
1.「/home/fuelphp/config/routes.php」を複製して「/home/fuelphp/config/routes_xxxx.php」を作成
2.「/home/fuelphp/config/routes.php」を複製して「/home/fuelphp/config/routes_yyyy.php」を作成
3.「/home/htdocs/xxxx/index.php」で「routes_xxxx.php」を「define()」する
4.「/home/htdocs/yyyy/index.php」で「routes_yyyy.php」を「define()」する

routes_〇〇〇.phpの定義

▼上記の「3」「4」の追加内容

define('PATH_CONFIG_ROUTES', 'routes_〇〇〇.php');

routes.phpで割り振り

「/home/fuelphp/config/routes.php」を修正。

▼「/home/fuelphp/config/routes.php」

return include PATH_CONFIG_ROUTES;

※アクセス元によりルーティングの設定ファイル(routes_〇〇〇.php)を割り振る。

各routes_〇〇〇.phpの修正

現状だと「http://xxxx/hoge」と「http://yyyy/hoge」は同じページが表示されてしまう。

例えば下記のようにしたい。
・「http://xxxx/hoge」はアクセス許可
・「http://yyyy/hoge」は404にリダイレクトさせたい

▼「/home/fuelphp/config/routes_xxxx.php」

// 修正不要

▼「/home/fuelphp/config/routes_yyyy.php」

// 下記追加:404ページのPATHを指定
'hoge' => '〇〇〇/404'

関連項目

FuelPHP 共通部分をパッケージ化して使い回す
一つのサイトでFuelPHPを複数使う(簡略版) - 使い回す箇所が少ない場合はコッチのほうが良いと思う。
FuelPHPでサービス実装後に別サービス追加 - 使い回す箇所が多い場合はコッチのほうが良いと思う。
1サイトで複数のFuelPHPを使うときのメモ - ややこしくなってきたのでまとめてみた。