【php】 Cakephpでディレクトリを整理したい
今回はCakephpをを使ってディレクトリ整理についてです。
仕事ではFacadeパターンを使う事が多く Facadeパターンを取り入れるにはディレクトリの整理が必須になってきます。
Facadeパターンについては以下を参考に
何がしたいかと言うと、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(接尾語)をつけるなりして運用すると幸せになれると思います。