参考:https://www.cnblogs.com/achengmu/p/6605198.html
https://blog.csdn.net/jalon2015/article/details/46900569
https://www.jianshu.com/p/63e56d2f51ef
还有个http://www.cnblogs.com/jkko123/p/8670826.html
yii2中的行为理解就是,写一个继承yii\base\Behavior的类,然后其他继承自component的组件或者类可以直接使用这个类的方法或者属性
其实就相当于use
例子:
先写继承behavior的类
namespace app\components\behavior;
use yii\base\Behavior;
class MyBehavior extends Behavior{
<span class="hljs-keyword">public</span> <span class="hljs-variable">$name</span>;
<span class="hljs-keyword">public</span> <span class="hljs-variable">$age</span>;
<span class="hljs-comment">// set方法</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setName</span><span class="hljs-params">(<span class="hljs-variable">$name</span>)</span>
{<!-- --></span>
<span class="hljs-variable">$this</span>->name = <span class="hljs-variable">$name</span>;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getName</span><span class="hljs-params">()</span>
{<!-- --></span>
<span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>->name;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setAge</span><span class="hljs-params">(<span class="hljs-variable">$age</span>)</span>
{<!-- --></span>
<span class="hljs-variable">$this</span>->age = age;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAge</span><span class="hljs-params">()</span>
{<!-- --></span>
<span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>->age;
}
<span class="hljs-comment">// 也可以在里面写事件</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">events</span><span class="hljs-params">()</span> {<!-- --></span>
<span class="hljs-keyword">return</span> [
BaseActiveRecord::EVENT_BEFORE_VALIDATE => <span class="hljs-string">'beforeValidate'</span>,
BaseActiveRecord::EVENT_AFTER_INSERT => <span class="hljs-string">'afterSave'</span>,
BaseActiveRecord::EVENT_AFTER_UPDATE => <span class="hljs-string">'afterSave'</span>,
BaseActiveRecord::EVENT_BEFORE_DELETE => <span class="hljs-string">'beforeDelete'</span>,
];
}
}
然后其他类直接先使用behavior方法用
class DefaultController extends Controller
{
<span class="hljs-keyword">public</span> <span class="hljs-variable">$url</span>;
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">behaviors</span><span class="hljs-params">()</span>
{<!-- --></span>
<span class="hljs-keyword">return</span> [
<span class="hljs-comment">// 匿名行为,只有行为类名</span>
<span class="hljs-string">'MyBehavior'</span>=>[
<span class="hljs-string">'class'</span>=>MyBehavior::className(), <span class="hljs-comment">// 这边要被上面use了</span>
<span class="hljs-string">'name'</span>=><span class="hljs-string">'jerry'</span>,
<span class="hljs-string">'age'</span>=><span class="hljs-number">20</span>
]
];
}
<span class="hljs-comment">/**
* 开始在方法中使用
*<span class="hljs-phpdoc"> @return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">actionIndex</span><span class="hljs-params">()</span>
{<!-- --></span>
<span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>->render(<span class="hljs-string">'index'</span>, [<span class="hljs-string">'age'</span>=><span class="hljs-variable">$this</span>->age, <span class="hljs-string">'name'</span>=><span class="hljs-variable">$this</span>->name]);<span class="hljs-comment">// 这边直接使用</span>
> 这边是另一个添加行为的方法,就是一个继承了component的类然后attach了behavior,这个attach用的比较多
<span class="hljs-variable">$MyBehavior</span>=<span class="hljs-keyword">new</span> MyBehavior;<span class="hljs-comment">// 继承的是behavior</span>
<span class="hljs-variable">$MyBehaviorAttachClass</span>=<span class="hljs-keyword">new</span> MyBehaviorAttachClass;<span class="hljs-comment">// 继承的是component</span>
<span class="hljs-variable">$MyBehaviorAttachClass</span>->attachBehavior(<span class="hljs-string">'MyBehavior'</span>,<span class="hljs-variable">$MyBehavior</span>);<span class="hljs-comment">// 附加上去</span>
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$MyBehaviorAttachClass</span>->propertyTest;<span class="hljs-comment">// 直接使用行为的属性</span>
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$MyBehaviorAttachClass</span>->methodTest();<span class="hljs-comment">// 和方法</span>
}
}
