You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							2.7 KiB
						
					
					
				| <?php | |
| /** | |
|  * @link http://www.yiiframework.com/ | |
|  * @copyright Copyright (c) 2008 Yii Software LLC | |
|  * @license http://www.yiiframework.com/license/ | |
|  */ | |
|  | |
| namespace yii\base; | |
|  | |
| /** | |
|  * Behavior is the base class for all behavior classes. | |
|  * | |
|  * A behavior can be used to enhance the functionality of an existing component without modifying its code. | |
|  * In particular, it can "inject" its own methods and properties into the component | |
|  * and make them directly accessible via the component. It can also respond to the events triggered in the component | |
|  * and thus intercept the normal code execution. | |
|  * | |
|  * @author Qiang Xue <qiang.xue@gmail.com> | |
|  * @since 2.0 | |
|  */ | |
| class Behavior extends \yii\base\Object | |
| { | |
| 	/** | |
| 	 * @var Component the owner of this behavior | |
| 	 */ | |
| 	public $owner; | |
|  | |
| 	/** | |
| 	 * Declares event handlers for the [[owner]]'s events. | |
| 	 * | |
| 	 * Child classes may override this method to declare what PHP callbacks should | |
| 	 * be attached to the events of the [[owner]] component. | |
| 	 * | |
| 	 * The callbacks will be attached to the [[owner]]'s events when the behavior is | |
| 	 * attached to the owner; and they will be detached from the events when | |
| 	 * the behavior is detached from the component. | |
| 	 * | |
| 	 * The callbacks can be any of the followings: | |
| 	 * | |
| 	 * - method in this behavior: `'handleClick'`, equivalent to `[$this, 'handleClick']` | |
| 	 * - object method: `[$object, 'handleClick']` | |
| 	 * - static method: `['Page', 'handleClick']` | |
| 	 * - anonymous function: `function($event) { ... }` | |
| 	 * | |
| 	 * The following is an example: | |
| 	 * | |
| 	 * ~~~ | |
| 	 * [ | |
| 	 *	 'beforeValidate' => 'myBeforeValidate', | |
| 	 *	 'afterValidate' => 'myAfterValidate', | |
| 	 * ] | |
| 	 * ~~~ | |
| 	 * | |
| 	 * @return array events (array keys) and the corresponding event handler methods (array values). | |
| 	 */ | |
| 	public function events() | |
| 	{ | |
| 		return []; | |
| 	} | |
|  | |
| 	/** | |
| 	 * Attaches the behavior object to the component. | |
| 	 * The default implementation will set the [[owner]] property | |
| 	 * and attach event handlers as declared in [[events]]. | |
| 	 * Make sure you call the parent implementation if you override this method. | |
| 	 * @param Component $owner the component that this behavior is to be attached to. | |
| 	 */ | |
| 	public function attach($owner) | |
| 	{ | |
| 		$this->owner = $owner; | |
| 		foreach ($this->events() as $event => $handler) { | |
| 			$owner->on($event, is_string($handler) ? [$this, $handler] : $handler); | |
| 		} | |
| 	} | |
|  | |
| 	/** | |
| 	 * Detaches the behavior object from the component. | |
| 	 * The default implementation will unset the [[owner]] property | |
| 	 * and detach event handlers declared in [[events]]. | |
| 	 * Make sure you call the parent implementation if you override this method. | |
| 	 */ | |
| 	public function detach() | |
| 	{ | |
| 		if ($this->owner) { | |
| 			foreach ($this->events() as $event => $handler) { | |
| 				$this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler); | |
| 			} | |
| 			$this->owner = null; | |
| 		} | |
| 	} | |
| }
 | |
| 
 |