【CakePHP2】処理を共通化(モジュール化)する

はじめに

CakePHPにはあらかじめ用意された共通化の仕組みがあります。ごりごりプログラムを書いていると後になって共通化しておけばよかったといったことがよくあります。
うまく処理をモジュール化すると生産性が格段に向上します。

 

 

 

Controllerのモジュール化

コントローラのコンポーネントフォルダに
/app/Controller/Componentディレクトリに共通したいコードを作成します

 

 

Modelのモジュール化

AppModelを作ってそれを継承します。

 

 

View(テンプレート)のモジュール化

/app/Controller/Elementsフォルダにテンプレートファイルを作成します。
メインのテンプレートファイルから次のコードでElementsフォルダのテンプレートファイルを呼び出す。

echo $this->element('エレメント名');

 

 

View(コード)のモジュール化

/app/View/Helperディレクトリに共通したいコードを作成します

<?php
App::uses('AppHelper', 'View/Helper');
class CommonHelper extends AppHelper {
function test()
{
return "ViewHelperがよびだされました";
}
}

これでView(テンプレートファイル)で使用できるようになります

<div>
<?php echo $this->Common->getPath(); ?>
</div>

 

コントローラのコンポーネントに作成したモジュールをViewで利用したい場合は、PHPのマジックメソッドでヘルパーにない場合はコントローラのコンポーネントを見にいくようにすると便利です。

function __call($methodName, $args) {
 App::import('Component', 'Common');
 $common = new CommonComponent(new ComponentCollection());
 return call_user_func_array(array($common, $methodName), $args);
}

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

/app/Vendorディレクトリに共通したいコードを作成します

/app/Vendor/util/test.php
namespace Util;

class Test {
    public function sayHello() {
       return 'Hello world';
    }
}
App::import('Vendor', 'util/test');
Controller,task、Model、ViewHelperで呼び出すことができます。
$test = new Util\Test();
$test->sayHello();