開発において、コードをモジュール化することはとても大切です。
・開発の効率化
- モジュールにすれば、必要なときに呼び出すだけ。
- 問題を一意に解決出来る。
・運用しやすい
- モジュール部分の変更で全箇所のアップデートが出来る。
・コードの質向上
- 冗長をなくせるので、コードの質が上がります。
…etc
というわけで、CakePHPにおけるモジュールの扱い方をまとめたいと思います。
1.Controllerにおけるモジュール
2.Modelにおけるモジュール
3.Viewにおけるモジュール
4.Controller、Model、Viewに共通する処理のモジュール
1.Controllerにおけるモジュール
/app/Controller/Component/ ディレクトリにモジュールにしたいファイルを入れていく。
<?php
class ResposeComponent extends Component {
public function getHello() {
return "hello world!";
}
}
Responseのところは適宜変えて使う。
<?php
App::uses('AppController', 'Controller');
class TestsController extends AppController {
public $name = 'Tests';
public $components = array(‘Response');
public function index() {
$hello = $this->Response->getHello();
}
}
Controllerでコンポーネントを使うときは$componentで使いたいコンポーネントを呼び出せば利用可能。
2.Modelにおけるモジュール
AppModelを作ってそれを継承する。
AppModelを作ってその中に、必要な関数等をかいていく。
それを継承する各Modelに下記記載。
<?php
App::uses('AppModel', 'Model');
class …
ちなみに、他のモデルをモデル内で使うときは
CakePHP Modelの中で他のモデルを使う(App:import を作ってクラスを読み込む)
を参照して下さい。
3.Viewにおけるモジュール
・app/View/Elements/以下に.ctpファイルを作成して、下記で呼び出し。
echo $this->element('エレメント名');
・app/View/Elements/mypages/module.ctpの呼び出し。
echo $this->element('mypages/module');
・$comment
の中に'hogehoge'
を入れて受け渡す。
echo $this->element('mypages/module', array('comment'=>'hogehoge');
・$comment
の中に$hogehoge
を入れて受け渡す。
echo $this->element('mypages/module', array('comment'=>$hogehoge);
4.Controller、Model、Viewに共通する処理のモジュール
Vendorを利用すると、共通のモジュールを作成することが出来る。
namespace Util;
class Test {
public function sayHello() {
return 'Hello world';
}
}
App::uses('AppController', 'Controller');
App::import('Vendor', 'util/test');
class MypageController extends AppController {
public function index() {
$test = new Util\Test();
$test->sayHello();
}
}
上記のように
Model、Viewに関しても同様にファイルの最初に以下を加え、
App::uses('AppController', 'Controller');
App::import('Vendor', 'util/test');
適当な位置で下記で呼び出せる。
$test = new Util\Test();
$test->sayHello();
*Vendorのファイル名は小文字だということです。
#参考
CakePHPの共通のライブラリの作り方
cakephp elementの使い方について
[CakePHP 2.x]Model,View,Controllerで共通する処理