FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

cakePHPって好きです

リアルなケーキはもっと好きです。@kakeyangです。

以前、Smacの開発環境に関する記事で少しだけcakePHPに触れました。

今回は、cakePHPを弊社でどのように使用しているかを紹介したいと思います。


f:id:k_chindamaikul:20150722152556p:plain

cakePHPとは?

今更説明の必要はないでしょう。

公式サイトではPHPの高速開発フレームワークと謳っています。

詳細な説明は省きますが、軽量/シンプルな設計になっており、導入障壁の低いフレームワークだと思います。

DBへの簡単な登録/編集/削除処理や、ajax処理であれば、

ほとんどコードを書かずに実現できたりします。

なぜcakePHP

弊社ではもともとシステム、及び開発部門の拡大に伴い、

可搬性/保守性/可読性を目的として、フレームワークの導入を検討していました。

そのなかでも、

  • 拡張機能が大きすぎず軽量
  • フォーラムが活発で日本語のドキュメント類も多い
  • 突然フレームワークの開発が止まることが(なんとなく)なさそう
ということでcakePHPを導入することにしました。

管理系の画面実装なんかでは、

ロジック(というか極端な話SQLのみ)だけ変更し、controllerとviewはほとんど流用出来たりしているので、

かなり開発効率は上がっていると実感しています。

cakePHPのカスタマイズ

とはいえ、cakePHPの一般的な使用法を無視して、

拡張機能を利用しつつカスタマイズしている部分もあります。

コンポーネントの利用

  • テーブルを結構結合する必要があるので、modelクラスのDBアクセス用メソッドが使いにくい
  • というかSQLは自分たちの手でチューニングしたい
というわけで、controllerから直接modelを操作せず、

下記のように、間にcomponentを挟んでいます。

f:id:k_chindamaikul:20150722152625j:plain

で、
hogeController.php

class hogeController( ) {
 var $components = array( 'hogeLogic' );
 function index( ){
  $this->hogeLogic->getList();
 }


的な感じでとりあえずcomponentを読んでおいて、

hogeLogicComponent.php

class hogeLogicComponent( ) {
 private $_hoteModel;
 function startup(& $controller) {
  App::import('Model','hoge');
  $this->_hogeModel = new hogeModel;
 }
 function getList() {
  return $_hogeModel->find('all');
 }
}


という感じでcomponentからDBへアクセスしています。
実際にはメソッド内でSQLをゴリゴリ書いているわけですが。

では、modelはというと、

hogeModel.php

class hogeModel( ) {
 public $name = 'mediaModel';    // クラス名
 public $useTable = 'HOGE';        // テーブル名
 
 // 以下、validation定義
}


ちなみにvalidationの定義は、HTMLタグのIDに対して、

public $validate = array(
 'hoge_name' => array(
  rule1' => array(
   rule' => array('minLength', '1'),
   required' => true,
   'allowEmpty' => false,
   message' => 'ほげ名を入力してください。'
  ),
  'rule2' => array(
   'rule' => array('maxLength', '40'),
   'message' => 'ほげ名は40文字以内としてください。'
  )
 ),
 'hogehoge_name' => array(
  'rule1' => array(
   'rule' => array('maxLength', '100'),
   'message' => 'ほげほげは100文字以内としてください。'
  )
 )
)


と、配列としてルールと、ルールに沿わなかった場合のメッセージを
定義すればOKです。すごく簡単。

とまあ結論、cakePHPいい感じです。