コンポーネントとは何か整理する【cakephp3.8】

前回はヘルパーについて整理したノートをまとめたので、次はコンポーネントについて整理してまとめておく。

コンポーネントを理解して、使いこなせるようになったらようやくアプリ開発の見通しが良くなってくるので、しっかりマスターしていきたい。

ここらへんから、最初のうちの学習なんて試行錯誤でアルゴリズムやプログラムを作成していくものではなくて、とにかく設計・構築の取捨選択とスピーディーな実装が肝だというのがなんとなく肌感でわかってくる。

コンポーネントとは何か

コンポーネントとは、、

コンポーネントはコントローラー間で共有されるロジックのパッケージです。 CakePHP には、様々な共通のタスクを支援するための素晴らしいコアコンポーネントが 用意されています。あなた独自のコンポーネントも作成できます。 もしコントローラー間で コピー&ペーストしたい箇所があった場合、その機能を含むコンポーネントの作成を 検討しましょう。コンポーネントを作成することで、コントローラーのコードを綺麗に保ち、 プロジェクト間のコードの再利用につながります。

https://book.cakephp.org/3/ja/controllers/components.html

コンポーネントとは、コントローラに読み込んで機能を拡張するプログラムであり、機能ごとの小さなパッケージのようなもの。

ようは、独自関数のまとまり。呼び出せば簡単にページネーターやフラッシュメッセージが実装できる。

既存のコンポーネントの他、自分で作成することもできる。

ただし、npmなどのように(またはwardpressのプラグイン)自由に配布してシェアできる環境がないのが致命的なところ。

cakephpに含まれているコンポーネント

もともと含まれているコンポーネントには次のようなものがある。

  • AuthComponent
  • クッキー
  • CSRF
  • フラッシュ
  • セキュリティ
  • ページネーション
  • リクエストハンドリング

みると、セキュリティ系の機能がコンポーネントには多い印象。コンポーネントを上手く使いこなすことで、セキュリティについても安心できるアプリケーションを作れそう。

ちなみに、コンポーネントの定義ファイルはここにあった。
./vendor/cakephp/cakephp/src/Controller/Component/*Component.php

コンポーネントの使い方

簡単な例として、Flashコンポーネントを使ってみる。

Flashコンポーネントを使ってみる

// Controller
public function index(){
  $this->Flash->success('成功しました!');
}

// Layout
<?= $this->Flash->render() ?>

// Template/Element/Flash/success.ctp
<?php
if (!isset($params['escape']) || $params['escape'] !== false) {
    $message = h($message);
}
?>
<div class="message success" onclick="this.classList.add('hidden')"><?= $message ?></div>

これで、デフォルトである緑色のsuccessフラッシュメッセージが表示される。

Controllerの書き方

公式マニュアル

基本的な書き方

$this->Flash->success('成功しました!');

keyを使った書き方。

$this->Flash->success('成功しました!', [
          'key' => 'hoge'
        ]);

// Layout
<?= $this->Flash->render('hoge') ?>

success以外を使う。

// /Component/Element/Flash/*.ctp
// *の部分をメソッドに
// 独自で作成することもできる
$this->Flash->error('成功しました!');

パラメーターを渡すには、第2引数に
['params’ => ['変数名’ => '値’]]

$this->Flash->success('The user has been saved', [
    'params' => [
        'name' => 'taro',
        'email' => 'taro@aaa.com'
    ]
]);