サブノート

技術的なトピックが中心の備忘録

[PHP][CakePHP]実処理をコンポーネントに任せる

controllerは短いほうが良い。
リクエストからレスポンスまでの処理の流れが一覧できる程度の長さが理想。

よって実処理はcomponentに任せる。
JavaのServiceのイメージ。

任せることによって

  • コントローラの肥大化を回避

できるだけでなく、

  • 処理の共通化(複数controllerからの呼び出し)

が可能となる。



例)CSVファイルをインポートし、HTMLファイルを自動生成したい

./app/controllers/import_controller.php

<?php
class ImportController extends AppController {

  public $components = array('CreateHtml');

  /** インポート処理 **/
  function action() {

    //ログインチェックとか

    //アップロードされたファイルを移動する

    //ファイルの読み込み

    //htmlファイルを作成する
    $this->CreateHtml->create($fileContents);

    //インポート日時をDBに格納

  }

}
?>


./app/controllers/components/create_html.php

<?php
class CreateHtmlComponent extends Object {

  /** コンストラクタ **/
  public function initialize(Controller $controller) {
    //これでcomponentからcontrollerを呼び出すことができる
    $this->Controller = $controller;
  }

  /** htmlファイルを作成する **/
  function create($contents) {
    //処理
  }

}
?>