J Lee
J Lee

Reputation: 1593

Extending or Overriding CakePHP plugins without modifying original

I am using a plugin (in this case Authake) and I would like to override/extend some of the functionality, but I'm not sure how I would go about doing this. I've managed to figure out how to customize the view (I created a folder '/app/views/plugins/authake' but I'm wondering how to modify/override/extend the Models and Compoenents of the plugin.

Upvotes: 2

Views: 1645

Answers (1)

Moz Morris
Moz Morris

Reputation: 6761

I'm guessing you want to extend the functionality of a model or perhaps a behavior in the plugin?

For example, we could extended the functionality of a Sequence behavior that is part of a Sequence plugin like so:

Create a new file in app/models/behaviors and call it extended_sequence.php

In this file, we'll create an ExtendedSequenceBehavior class that extends SequenceBehavior and overrides the beforeFind method. It will end up looking something like:

<?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);
  }
}

?>

Note, that we have to import the Sequence behavior using Cake's App::import before we define the ExtendedBehavior class.

Update your model to use the extended class:

var $actsAs = array('ExtendedSequence');

Upvotes: 5

Related Questions