プラグインを拡張する方法(how to extend a plugin)
Cakephp1.2.4を利用しています。
ある外部プラグインを使っていて、その一部を拡張したい場合、そのプラグイン自体を改良していくのもいいんですが、それだとプラグインのアップデートが難しくなります。
今回は、僕のCakeplusプラグインを使ってそれを拡張する方法。
結論から言うと、Cakeplusのbehaviorをインポートして、継承するだけですw
Cakeplusは現在githubで管理しています。
http://github.com/ichikaway/cakeplus/tree
現在下記の機能があります。
- よく使うバリデーションをまとめたBehavior
- バリデーションメッセージを国際化しつつDryにするBehavior
- 自動でhiddenタグを生成するヘルパー
- 配列データをまとめてnl2brとh()を適用するコンポーネント
今回は、cakeplusのバリデーションルールを集めたadd_validation_rule.phpを拡張してみます。add_validation_rule自体の使い方は下記を参照ください。
http://d.hatena.ne.jp/cakephper/20090603/1244016972
まず、cakeplusをダウンロードして設置します。フォルダ構成として、plugins/cakeplusになります。
pluginsフォルダ以下にcakeplusplusという拡張用プラグインフォルダを作ります。
下記のような構成にします。
plugins |- cakeplus |- cakeplusplus |- models |-behaviors
そして、cakeplusplus/models/behaviors/以下にext_add_validation_rule.phpというファイルを作成し、下記内容を記載します。
<?php App::import('Model', 'cakeplus.AddValidationRule'); class ExtAddValidationRuleBehavior extends AddValidationRuleBehavior { } ?>
あとは、モデルのbehavior呼び出しで、Cakeplusplus.ExtAddValidationRuleを呼び出せば継承した側のbehaviorが利用できます。
<?php class Post extends AppModel { var $name = 'Post'; //var $actsAs = array('Cakeplus.AddValidationRule'); var $actsAs = array('Cakeplusplus.ExtAddValidationRule'); } ?>
例えば、add_validation_rule.phpのmaxLengthJP()を拡張したければ、cakeplusplus/models/behaviors/ext_add_validation_rule.phpを変更するだけです。下記の例は、文字数制限の最大文字数を、定義したものの2倍まで許すという例です。
<?php App::import('Model', 'cakeplus.AddValidationRule'); class ExtAddValidationRuleBehavior extends AddValidationRuleBehavior { function maxLengthJP( &$model, $wordvalue, $length ) { $word = array_shift($wordvalue); //extend $length = $length * 2; return( mb_strlen( $word ) <= $length ); } } ?>