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を使って、どんどん共通化すればコードの効率性があがり、編集・修正も行いやすくなります。
ぜひ積極的に利用しましょう。
コメント