zoukankan      html  css  js  c++  java
  • yii行为和过滤器

    1. 行为是对类的功能进行了扩展,针对开闭原则,为了类的扩展而生,不去修改类原有的代码。
    2. yii的行为需要继承yiiaseBehavior,这就好比你要给人安装一个胳膊,这个胳膊得是人的,而不能是老虎的、大象的,要遵守这个规范。
    3. 而接受行为绑定的类必须得是继承了component的子类,同样是一个规范吧。
    4. 转  yii行为的讲解:https://blog.csdn.net/qq_24127857/article/details/79394485
    5. 经测试发现,如果给一个类绑定了两个行为,并且这两个行为类里面都定义了相同的属性name, 那么在调用这个name属性的时候,不会报错,而是会调用写在前面的行为类的name属性。具体见代码
      class TestController extends Controller
      {
          public function actionTest()
          {
              echo 'this is  test action<br>';
              $this->foo();
              $this->who();
              echo $this->name;  //这个属性是MyBehavior 和 YourBehavior 都有的属性,这里不会报错
          }
      
          public function behaviors()
          {
              return [
                  'mybehavior' => MyBehavior::className(), //这个在前,那么就调用MyBehavior里的name属性,而不是报错
                  'yourbehavior' => YourBehavior::className(), // 
              ];
          }
      }
      
      //第一个行为类MyBehavior
      class MyBehavior extends Behavior
      {
          public $name = 'me';
          public $age;
      
          public function foo()
          {
              echo 'this is foo function<br>';
          }
      
          public function bar()
          {
              return 'this is bar function<br>';
          }
      }
      
      //第二个YourBehavior
      class YourBehavior extends Behavior
      {
          public $name = 'you';
      
          public function who()
          {
              echo 'who are you?<br>';
          }
      }
    6. 过滤器
      //还是上面的TestController调用
      class MyFilter extends ActionFilter
      {
          public $name;
      
          public function beforeAction($action)
          {
              echo '这个 是在test function 之前执行的beforeAction<br>';
              return parent::beforeAction($action);
          }
      
          public function afterAction($action, $result)
          {
              echo '这个是在test function 之后执行的afterAction<br>';
              $result = 'result 有什么用呢?<br>';
              return parent::afterAction($action, $result); // TODO: Change the autogenerated stub
          }
      
          public function beforeFilter($event)
          {
              echo 'this is event? beforeFilter<br>';
              return parent::beforeFilter($event); // TODO: Change the autogenerated stub
          }
      
          public function afterFilter($event)
          {
              echo 'this is event? afterFilter<br>';
              parent::afterFilter($event); // TODO: Change the autogenerated stub
          }
      }
      //output:
      this is event? beforeFilter
      这个 是在test function 之前执行的beforeAction
      this is tes action
      this is event? afterFilter
      这个是在test function 之后执行的afterAction
      result 有什么用呢?
  • 相关阅读:
    C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。
    opencv中的vs框架中的Blob Tracking Tests的中文注释。
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
  • 原文地址:https://www.cnblogs.com/bneglect/p/11976002.html
Copyright © 2011-2022 走看看