FuelPHPで管理画面を作っていた時に、どうもファイルが散らばってきました。管理画面だけでこんなになっちゃったら、ユーザ側の画面を作り始めた時に、ファイルが散らばりすぎるんじゃないかと思って、FuelPHPの機能のmoduleを使うことにしました。

もともと普通のやり方で作っていたものだったので、ちょこっと躓いたりもしたので、それの備忘録的なメモです。ここでは、すでにある程度MVCで開発が進んでいて、それらをmoduleといてひとまとめにすることを考えます。

module機能について

moduleを使うと、

APPPATH
┗modules
  ┣module1
  ┃ ┣class
  ┃ ┃ ┣model
  ┃ ┃ ┣controller
  ┃ ┃ ┗view
  ┃ ┣config
  ┃ ┣lang
  ┃ ┗view
  ┃
  ┗module2
    ┣class
    ┃ ┣model
    ┃ ┣controller
    ┃ ┗view
    ┣config
    ┣lang
    ┗view

のように一つのモジュールとしてMVCをまとめることができます。ある程度機能ごとにファイルをまとめられるので、module1を開発するときはmodule1ディレクトリだけを見ればよくて、ファイルを探す手間を省けます。

さらに、本来URLが{base_url}/controller/actionとなるところを
{base_url}/module/controller/action/になり、階層が一つ増えます。

module化の方法

ファイルのコピー

まず、APPPATH直下のclass, config, lang, viewの4つのディレクトリをAPPPATH/modules/module1ディレクトリを作ってコピーします。

configにmodule_pathの設定

APPPATH/config/config.phpをいじります。ファイル内の

[code lang=php]
return array(
// 略
'module_paths' => array(
APPPATH.'modules'.DS
),
// 略
)
[/code]

の部分がコメントアウトされていると思うので、コメントを外します。

namespaceの指定

ControllerとModelに

[code lang=php]
namespace Module1
[/code]

を一行付け加えます。namespaceは最初に書かなければならないので、<?phpの直後に書いてください。

COREのクラスの呼び出し部分を変更

namespaceを指定したので、COREクラスを呼び出すときには必ずViewのように頭にを付けなければなりません。なので、使っているView, Input, Responseなどに見落としがないようにしましょう。また、親クラスにもextendsController_Templateのようにをつけましょう。

ここまでやって、{base_url}/module/controller/actionにアクセスすれば、module内のcontrolleractionが表示されると思います。エラー吐くときは多分、最後ののつけ忘れがほとんどだと思いますので、注意してくださいねー。