扩展或覆盖CakePHP插件不修改原来的


Extending or Overriding CakePHP plugins without modifying original

我正在使用一个插件(在这种情况下是Authake),我想覆盖/扩展一些功能,但我不确定我将如何去做这件事。我已经设法弄清楚如何自定义视图(我创建了一个文件夹'/app/views/plugins/authake',但我想知道如何修改/覆盖/扩展插件的模型和组件。

我猜你想扩展模型的功能或插件中的行为?

例如,我们可以扩展Sequence插件中Sequence行为的功能,如下所示:

在app/models/behaviors中创建一个新文件,命名为extended_sequence.php

在这个文件中,我们将创建一个ExtendedSequenceBehavior类,它扩展SequenceBehavior并覆盖beforeFind方法。它最终看起来像这样:
<?php
/**
 * Import the SequenceBehavior from the Sequence Plugin
 */
App::import('Behavior', 'Sequence.Sequence');
/**
* Extended Sequence Behavior
*/
class ExtendedSequenceBehavior extends SequenceBehavior
{
  /**
   * Overrides the beforeFind function
   */
  public function beforeFind(&$model, $queryData)
  { 
    /**
     * Do something different here such as modify the query data
     */
    /**
     * You could still call the original function as well
     */
    parent::beforeFind(&$model, $queryData);
  }
}
?>
注意,在定义ExtendedBehavior类之前,我们必须先使用Cake的App::import导入Sequence行为。

更新你的模型以使用扩展类:

var $actsAs = array('ExtendedSequence');