作成日:2018-02-28, 更新日:2018-08-10
やりたいこと:app以外は使い回したい
- ▼経緯
- 既存サイトに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
パッケージ化して使い回す方法もある。
「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を使うときのメモ - ややこしくなってきたのでまとめてみた。