Componentによる共通処理の作成【CakePHP4】

Conponentについて公式では以下のような説明がなされています。

『コンポーネントはコントローラー間で共有されるロジックのパッケージです。』
参照:Cake PHP 3.10

非常にざっくり言うと、「各Controller間で共通で使用したい関数があったら、ここで定義するといいよ」ということです。

今回はComponentの使い方について解説していきます。

使い方

Componentの作成

以下のようにComponentを作成します。

今回は仮に、記事IDを渡すと一致する記事を返す、という関数を定義します。

//パス:/src/Controller/Component/ArticleComponent.php
<?php

//Componentを使うよ。という宣言。
namespace App\Controller\Component;
use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;

//今回はデータ取得にTableRegistryを使うので記載。
use Cake\ORM\TableRegistry;

//「article」 という名前のcomponentを定義。
class articleComponent extends Component
{
     //関数を定義
     public function getArticle($id) {
        $articlesTable = TableRegistry::getTableLocator()->get('Articles');
        $article = $articlesTable->find()->where(["id" => $id])->first();
        return($article);
    }
}

このように定義すれば、全てのControllerで関数:getArticle()を使うことが可能です。

使い方

以下のコード例のように、Componentで定義した関数を利用することができます。

//path:/src/Controller/SampleController.php
<?php
namespace App\Controller;

class ArticlesController extends AppController
{
      public function demo(){
            $id = 1;
            //作成したComponentを読み込む
            $this->loadComponent('Article');
            //Component内で定義した関数、getArticle()を利用して記事取得。
            $article = $this->Article->getArticle($id);
      }
}

まとめ

各Controllerで共通して行う処理はたくさんあります。

Componentを使って、どんどん共通化すればコードの効率性があがり、編集・修正も行いやすくなります。

ぜひ積極的に利用しましょう。

コメント

タイトルとURLをコピーしました