【CakePHP入門】Componentによる共通処理について詳しく解説!

CakePHPでは、処理を共通化できるコンポーネント(Component)という便利な機能が提供されています。

この記事では、

・Componentの基本的な使い方
・Componentに引数を指定する方法
・よく使われるcomponent

などのコンポーネント(Component)の使い方について解説していきます。

今回はコンポーネントの便利な使い方について基礎の基礎から解説していきます!

目次

Componentとは

コンポーネント(Component)とはコントローラー間で共通して使用できるパッケージのことを言います。

そのため、共通して使用できる処理についてはComponentに処理を記述しておけば、コントローラーのコードの記述がすっきりできますし、他のコントローラーでも再利用できるので便利です。

コンポーネントは「src/Controller/Component/」にファイルを作成する必要があります。

注意点として使用するコンポーネントはCake\Controller\Componentuseで継承する必要があります。

継承されていない場合は例外が発生しますので注意しましょう。

Componentを使用する方法

ここでは実際にコンポーネントを作成して動作を確認してみましょう。

Componentの基本的な使い方

コンポーネントから本日の日付を取得する簡単なプロジェクトを作成してみます。

まずは新しいコンポーネントファイルとクラスを作成します。

ファイルは先ほど説明したように「src/Controller/Component/」に作成します。

src/Controller/Component/DateComponent.php

<?php
namespace App\Controller\Component;

use Cake\Controller\Component;

class DateComponent extends Component
{
    public function today()
    {
        return date('Y/m/d H:i:s');
    }
}

作成したファイルは、date関数で本日の日付を返すtodayメソッドを持つコンポーネントです。

次にコントローラのSampleController.phpを作成します。

Cake\Controller\SampleController.php

namespace App\Controller;

use App\Controller\AppController;

class SampleController extends AppController
{

  //DateComponentを指定する
  public $components = ['Date'];

  public function index() {

    //コンポーネントDateから値を取得
    $now = $this->Date->today();

    //Viewに$nowを渡す
    $this->set('now', $now);

  }
}

コントローラーからコンポーネントを使用するときは、使用するコンポーネントの名前を配列で指定する必要があります。

public $components = ['Date'];

使用するComponentにアクセスするには、$this->Dateのように->(矢印演算子)を指定します。

    $now = $this->Date->today();

続いて、ビューのindex.ctpを作成します。

src/Template/Sample/index.ctp

<?php echo '本日の日付は['.$now.']です。'; ?>

このプログラムを実行すると、以下のように表示されます。

本日の日付は[2017/08/20 22:58:36]です。

このようにコンポーネントはPHPのメソッドを呼び出す感覚で簡単に使用できることがわかりますね!

Componentに引数を指定する方法

コンポーネントのメソッドに引数を渡すことももちろん可能です。

また、コントローラーからコンポーネントを使用するにはloadComponentを使用する方法もあります。

$this->loadComponent(‘コンポーネント名’);

以下にloadComponentを使用する方法と、コンポーネントに引数を指定する簡単なサンプルを紹介します。

src/Controller/Component/DateComponent.php

<?php
namespace App\Controller\Component;

use Cake\Controller\Component;

class DateComponent extends Component
{
    public function today($day)
    {
        return date('Y-m-d', strtotime($day));
    }
}

Cake\Controller\SampleController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SampleController extends AppController
{

  public function index() {

    //Dateコンポーネントのインスタンスを生成
    $this->loadComponent('Date');

    //コンポーネントDateから値を取得
    $day = $this->Date->today('20170831');

    //Viewに$nowを渡す
    $this->set('day', $day);

  }
}

src/Template/Sample/index.ctp

<?php echo '指定した日付は['.$day.']です。'; ?>

実行結果:

指定した日付は[2017-08-31]です。

よく使われるcomponentについて

CakePHPでは、よく使用されるコンポーネントについてはあらかじめ用意されています。

・認証(AuthComponent)
・クッキー(CookieComponent)
・クロスサイトリクエストフォージェリ(CsrfComponent)
・フラッシュ(FlashComponent)
・セキュリティ(SecurityComponent)
・ページネーション(PaginatorComponent)
・リクエストハンドリング(RequestHandlerComponent)

認証(AuthComponent)、ページネーション(PaginatorComponent)については、以下の記事で詳しく解説していますので、ぜひ参考にしてくださいね!


まとめ

ここではコンポーネントについて、

・Componentの基本的な使い方
・Componentに引数を指定する方法
・よく使われるcomponent

を解説しました。

コンポーネントは処理を共通化できて異なるコントローラーで再利用が可能ですので非常に便利です。

もしコンポーネントの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次