CakePHP
cakephp2

CakePHP 共通処理の扱い方(module) まとめ

More than 1 year has passed since last update.

開発において、コードをモジュール化することはとても大切です。

・開発の効率化

- モジュールにすれば、必要なときに呼び出すだけ。

- 問題を一意に解決出来る。

・運用しやすい

- モジュール部分の変更で全箇所のアップデートが出来る。

・コードの質向上

- 冗長をなくせるので、コードの質が上がります。

…etc

というわけで、CakePHPにおけるモジュールの扱い方をまとめたいと思います。


1.Controllerにおけるモジュール

2.Modelにおけるモジュール

3.Viewにおけるモジュール

4.Controller、Model、Viewに共通する処理のモジュール



1.Controllerにおけるモジュール

/app/Controller/Component/ ディレクトリにモジュールにしたいファイルを入れていく。


/app/Controller/Component/ResponseComponent.php

<?php

class ResposeComponent extends Component {
public function getHello() {
return "hello world!";
}
}


Responseのところは適宜変えて使う。


/app/Controller/TestsController.php

<?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を利用すると、共通のモジュールを作成することが出来る。


/app/Vendor/util/test.php

namespace Util;

class Test {
public function sayHello() {
return 'Hello world';
}
}



/app/controller/MypageController.php

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で共通する処理