共通部品のComponent化

アプリケーションを作成していると、何度も同じような処理をプログラミングすることがあります。
そのような場合には、早めに共通部品化にして、重複処理を避けたいものです。

CakePHPには、Componentで共通部品化ができます。
本記事では、簡単なサンプルを例に示しながら、Component化する手順を解説しています。

bake component の実行

[hogehoge@sv7108 app]$ ./bin/cake bake component Common

Welcome to CakePHP v3.1.14 Console
---------------------------------------------------------------
App : src
Path: /home/hogehoge/example.com/public_html/apl/app/src/
PHP : 5.4.16
---------------------------------------------------------------

Creating file /home/hogehoge/example.com/public_html/apl/app/src/Controller/Component/CommonComponent.php
Wrote `/home/hogehoge/example.com/public_html/apl/app/src/Controller/Component/CommonComponent.php`

Baking test case for App\Controller\Component\CommonComponent ...
Deleted `/home/hogehoge/example.com/public_html/apl/app/tests/TestCase/Controller/Component/empty`

Creating file /home/hogehoge/example.com/public_html/apl/app/tests/TestCase/Controller/Component/CommonComponentTest.php
Wrote `/home/hogehoge/example.com/public_html/apl/app/tests/TestCase/Controller/Component/CommonComponentTest.php`

下記の構成で、Componentファイルが生成されます。

/home/hogehoge/example.com/public_html/apl/app/src
|--Console
|  |--Installer.php
|--Controller
|  |--AppController.php
|  |--Component
|  |  |--CommonComponent.php
|  |--PagesController.php
|--Model
|  |--Behavior
|  |  |--empty
|  |--Entity
|  |  |--User.php
|  |--Table
|  |  |--UsersTable.php
|--Shell
|  |--ConsoleShell.php
|--Template
|  |--Element
|  |  |--Flash
|  |  |  |--default.ctp
|  |  |  |--error.ctp
|  |  |  |--success.ctp
|  |--Pages
|  |  |--home.ctp
|  |--Users
|  |  |--add.ctp
|  |  |--edit.ctp
|  |  |--index.ctp
|  |  |--view.ctp
|--View
|  |--AjaxView.php
|  |--AppView.php
|  |--Helper

共通メソッドの追加

生成されたComponentに、共通化したいメソッドを追加していきます。
今回の例では、getHello メソッドを定義します。

CommonComponent.php

ここで生成したComponentを、Contorllerから呼び出します。

<!--?php namespace App\Controller; use App\Controller\AppController; class HogeController extends AppController { public function initialize() { parent::initialize(); $this-&gt;loadComponent('Common'); } public function test() { $res = $this-&gt;Common-&gt;getHello('hogehoge'); echo $res; } } &lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;br ?-->

ComponentからModelを利用する

CommonComponent.php

namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\ORM\TableRegistry; ※ 追加すること

class CommonComponent extends Component
{
    public function initialize(array $config) {
        $this->Users = TableRegistry::get("Users"); ※ モデル名を設定
    }

    public function getUser($name)
    {
        $res = $this->Users->find('all')
                ->where([
                        'name like ' => $name
                ]
        );
    }
}

スポンサーリンク