院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

CekePHPにて、Model・View・Controllerを複数のパスで呼ぶ   2007-07-14

なんでも、Model・View・Controllerのパスは複数指定することができるそうです。

http://www.mono-space.net/blog/php/e070409_mvc_path.htm(Model,View,Controllerを共有する)

/app/config/bootstrap.phpに記述するのですが、なんとbootstrap.phpの一番下に以下のような記述がありました(常識??)

  1. /**
  2. * The settings below can be used to set additional paths to models, views and controllers.(下のように設定を書いたらmodel・view・controllerに追加のパスを設定できるよ)
  3. * This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
  4. *
  5. * $modelPaths = array('full path to models', 'second full path to models', 'etc...');
  6. * $viewPaths = array('this path to views', 'second full path to views', 'etc...');
  7. * $controllerPaths = array('this path to controllers', 'second full path to controllers', 'etc...');
  8. *
  9. */

上記サイトでは、アプリケーション間の共有利用という点を書いていましたが、中・大規模なアプリケーションともなれば、テーブルの数に比例してModelが増え、ControllerやViewも階層的に管理したい場合が出てくるかと思います。

そういった場合に以下のようにbootstrap.phpに記述することで階層的にModelファイル等を管理できるのではないでしょうか。

  1. $modelPaths = array(
  2.   APP.'models/'//まずはデフォルトのmodelのPath
  3.   APP.'models/blog/'//ブログ関係のモデルはここに
  4.   APP.'models/mail/'//メール関係のモデルはここに
  5. );

または、1つのアプリケーション内で一元管理したいけどアプリ内アプリを個々に管理したい場合は

  1. $modelPaths = array(
  2.   APP.'models/'//まずはデフォルトのmodelのPath
  3.   APP.'custom/blog/models'//ブログ関係のModel
  4.   APP.'custom/blog/controllers'//ブログ関係のController
  5.   APP.'custom/blog/views'//ブログ関係のView
  6. );

(ただ、場合によってはアプリケーションを分離した方がいい場合が往々に考えられます)

上記コードは当然Controller・Viewにも対応しています(controllerPaths・viewPathsの定義によって)

お恥ずかしながら、今日までこんな便利な設定を知りませんでした(bootstrap.phpに書けばいいだなんて・・・)。


コメントを書く