LoginSignup
42
62

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-11

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

・開発の効率化
- モジュールにすれば、必要なときに呼び出すだけ。
- 問題を一意に解決出来る。

・運用しやすい
- モジュール部分の変更で全箇所のアップデートが出来る。

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

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

42
62
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
62