プラグインを拡張する方法(how to extend a plugin)

Cakephp1.2.4を利用しています。
ある外部プラグインを使っていて、その一部を拡張したい場合、そのプラグイン自体を改良していくのもいいんですが、それだとプラグインのアップデートが難しくなります。

今回は、僕のCakeplusプラグインを使ってそれを拡張する方法。
結論から言うと、Cakeplusのbehaviorをインポートして、継承するだけですw


Cakeplusは現在githubで管理しています。
http://github.com/ichikaway/cakeplus/tree


現在下記の機能があります。


今回は、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 );
        }
}
?>