2014 年 5 月 1 日

CakePHPのCoreライブラリ,Model,Controllerを複数アプリで共有

CakePHPのコアライブラリを共有できるようにしておくと、複数のアプリで利用できます。CakePHPのリビジョンが上がった場合も、常に最新のCakePHPが利用できるようになります。また、アプリ間で共通のModel,Controllerが共有できると、機能単位でアプリを分けることも可能になります。

環境

  • OS CentOS6.4
  • CakePHP 2.4.7

Coreライブラリを共有

Coreライブラリを最新に保つために、gitのsubmoduleを利用されている方もありますが、私の方法は、完全に別ディレクトリに最新のCakePHPをデプロイしておき、このディレクトリのCoreライブラリをアプリから参照する方法です。

まず、CakePHPをgithubからクローンします。例では/opt/cakephpに配置します。

$ cd /opt
$ git clone git://github.com/cakephp/cakephp.git
$ cd cakephp
$ git checkout 2.4.7 -b deploy
$ git branch
* deploy
  master

このディレクトリの./libディレクトリをアプリで共有します。

./libにphpのロードパスが通ればよいので、php.iniのinclude_pathにこのディレクトリを指定してもよいです。

include_path = ".:/opt/cakephp/lib"

php.iniを変更できないときは、アプリ側のwebroot/index.phpで以下の文を追加します。

define('CAKE_CORE_INCLUDE_PATH', '/opt/cakephp/lib');

これでCakePHPのCoreライブラリの共有が可能となります。

アプリ間でModel,Controllerを共有

以下のようなディレクトリ構成を作成します。commonは共通化したいクラスファイルを配置し、app1,app2から参照します。

/apps/

  common/ - 共通クラス
    Model/
    Controller/

  app1/   - アプリ1
    Config/
    Model/
    Controller/

  app2/   - アプリ2
    Config/
    Model/
    Controller/

app1,app2のConfig/bootstrap.phpで以下の文を追加します。

App::build(
  array(
    'Model' => array('/apps/common/Model'),
    'Controller' => array('/apps/common/Controller')
  )
);

これで、commonのModel,Controllerが共有できるようになります。このようにCoreライブラリやアプリ間の共通クラスを共有しておくと、将来の保守やフレームワークのセキュリティパッチ適用が簡単になります。