旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【php】 Cakephpでディレクトリを整理したい

今回はCakephpをを使ってディレクトリ整理についてです。

仕事ではFacadeパターンを使う事が多く Facadeパターンを取り入れるにはディレクトリの整理が必須になってきます。

Facadeパターンについては以下を参考に

Facade パターン - Wikipedia

何がしたいかと言うと、app/modelsディレクトリ以下にfacade,logic(service),daoというように整理をして それぞれの役割を持ったファイルを設置したいのです。

前はなぜか諦めて app/modelsディレクトリ以下に全てファイルを入れていたのですが やはり見栄えが悪いのと、探しにくいので今回こそってことで調べてみました。

設定については以下の手順で行いました。

以前なぜ見つけられなかったのかわからないけど、bootstrapにちゃんと書いてありました。 因みにcakephpのバージョンは1.3系

app/config/bootstrap.php

/**
 * The settings below can be used to set additional paths to models, views and controllers.
 * This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
 *
 * App::build(array(
 *     'plugins' => array('/full/path/to/plugins/', '/next/full/path/to/plugins/'),
 *     'models' =>  array('/full/path/to/models/', '/next/full/path/to/models/'),
 *     'views' => array('/full/path/to/views/', '/next/full/path/to/views/'),
 *     'controllers' => array('/full/path/to/controllers/', '/next/full/path/to/controllers/'),
 *     'datasources' => array('/full/path/to/datasources/', '/next/full/path/to/datasources/'),
 *     'behaviors' => array('/full/path/to/behaviors/', '/next/full/path/to/behaviors/'),
 *     'components' => array('/full/path/to/components/', '/next/full/path/to/components/'),
 *     'helpers' => array('/full/path/to/helpers/', '/next/full/path/to/helpers/'),
 *     'vendors' => array('/full/path/to/vendors/', '/next/full/path/to/vendors/'),
 *     'shells' => array('/full/path/to/shells/', '/next/full/path/to/shells/'),
 *     'locales' => array('/full/path/to/locale/', '/next/full/path/to/locale/')
 * ));
 *
 */

pathを追加したけりゃApp::buildに指定してあげればできるよって話なので

App::build(array(
    'models' =>  array(MODELS.'facade'. DS, MODELS.'logic'. DS, MODELS.'dao'. DS)
));

という感じで指定してあげれば可能となります。

因みにCakephp1.3では上記のようなコメントが書いてあるのですが、Cakephp1.2系では以下のような記述になっています。

/**
 * The settings below can be used to set additional paths to models, views and controllers.
 * This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
 *
 * $modelPaths = array('full path to models', 'second full path to models', 'etc...');
 * $viewPaths = array('this path to views', 'second full path to views', 'etc...');
 * $controllerPaths = array('this path to controllers', 'second full path to controllers', 'etc...');
 *
 */

この場合

$modelPaths = array(MODELS.'facade'. DS, MODELS.'logic'. DS, MODELS.'dao'. DS);

このように指定すれば可能となります。

Cakephp1.3系でも上記の指定は可能です。

注意としてはディレクトリ階層が違うので、同一名ファイルが存在してもエラーにはなりません。 ただし、先に読み込まれたファイルしか使えません。 なので、ファイル名が同一にならないようにprefix(接頭語)ないしsuffix(接尾語)をつけるなりして運用すると幸せになれると思います。