【fuelphp】共通処理をPackage化して複数サイトで使う方法

はじめに

1つのfuelphp複数サイト(一般ユーザが見るサイトと管理者が見るサイト等)を共存させるというのは僕はよくやります。
で、以前に以下の記事で共通処理をシンボリックリンク化してしまう方法を紹介しました。
fuelphpで複数サイトを構築する方法 - とりあえずphpとか

しかし、サーバーが複数台になった場合などでは
・サーバーを増やすたびにシンボリックリンク貼るのか?
・そもそもなんでそんな複雑の作りにしてるんだ?
とか思ったので今回の修正を考えました

構成

project
├── fuel
│   ├── app
│   │   ├── ・・・
│   ├── app_admin
│   │   ├── ・・・
│   ├── packages
│   │   ├── mypkg // ★ここに共通クラス・定義を置いてゆく
│   │   ├── ・・・
├── public
├── public_admin

パッケージ作成

packages以下の構成

mypkg
├─ bootstrap.php
├─ classes  // ★共通クラスはココに追加してゆく
│      ├─ model
│      │      ├ user.php
│      │      ├ ・・・
│      ├─ util
│      ├── ・・・
├─ config // ★共通定義はココに追加してゆく
│      ├─ mypkg.php

bootstrap.php

<?php
\Autoloader::add_core_namespace('Mypkg');

classes/model/user.php

<?php
namespace Mypkg

class Model_User extends \Model
{
    public static function get()
    {
        ・・・
    }
}

config/mypkg.php

<?php
return array(
    "hoge" => array(1,2,3),
);

パッケージ呼び出し

fuel/app/bootstrap.php(準備)

・・・

// Register the autoloader                                                                                                                                                                                         
\Autoloader::register();

// 作ったパッケージを使える様に
\Autoloader::add_namespace('Mypkg', PKGPATH . "mypkg/classes/");

・・・

fuel/app/tasks/test.php(実際に使用)

<?php
namespace Fuel\Tasks;

class Test
{
    public static function run()
    {
        // 共通クラス呼び出し                                                                                                                                                                                      
        $memberList = \Mypkg\Model_User::get();

        // 共通定義呼び出し                                                                                                                                                                                        
        \Config::load("mypkg",true);
        $config = \Config::get("mypkg.hoge");
    }
}

参考にさせていただいたサイト
http://tech.ewdev.info/2014/01/1373/

以上です