• 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 有什么用呢?
  • 相关阅读:
    [转]boost.bind 如何 bind continue.1
    Maven configure settins.xml
    JUNIT测试通过,EMMA通不过,java.lang.NoClassDefFoundError: oracle/security/pki/OracleWallet
    java中OOA,OOT, OOP, OOD, OOSM,OOM英文表示的含义是什么?
    关于navicat连接oracle 报 ORA12737 set CHS16GBK错误的解决方案
    configure integration Hibernate3,Spring3,Struts2,JPA
    Proguard returned with error code 1. See console
    Spring内置提供的NativeJdbcExtractor转换器
    oracle opreation instruction(表空间,用户etc)
    Struts2,oracle实现GOOGLE的分页样式
  • 原文地址:https://www.cnblogs.com/bneglect/p/11976002.html
Copyright © 2020-2023  润新知