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 有什么用呢?
  • 相关阅读:
    iOS MDM证书制作
    iOS 跳转到设置界面
    创建自己的远程私有库
    制作属于自己的cocoapod仓库和spec
    iOS 推送通知证书制作
    自定义导航栏之滑动返回
    xcode使用xib创建cell ,出现崩溃问题
    Xcode使用xib拖线时出现: could not insert new outlet connection
    2014年糯米网校招测试工程师题目解析
    JAVA操作LDAP的详解(JLDAP)
  • 原文地址:https://www.cnblogs.com/bneglect/p/11976002.html
Copyright © 2011-2022 走看看