手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

Yii2 静态方法 中怎么触发事件

在ActiveRecord的init中写了一个简单的事件触发:

PHP代码
  1. public function init(){    
  2.    $event = new XxxEvent();    
  3.    $this->on(self::EVENT_AFTER_UPDATE,[$event,'doSomeThing']);    
  4.     parent::init();    
  5. }    

就是这么简单,然后在程序中有一段触发:

PHP代码
  1. public static xxx(){  
  2.    self::updateAllCounters([],[]);  
  3. }  

然后发现,死活没有触发。追了一下代码发现,updateAllCounters没有从AR走,而是直接从db->createCommand()->execute走了

于是在下面加了一行:

self::trigger(self::EVENT_AFTER_UPDATE);

然而直接报错,说是trigger不支持静态调用,哦。。。trigger是非静态方法。

于是最后只能用万能的call_user_func_array的方法了:

PHP代码
  1. call_user_func_array([new self,'trigger'],[self::EVENT_AFTER_UPDATE]);  

有点贱,但总算实现了。

 

 

 

 

 

 

Yii2 updateAll tips

 Yii2 中的updateAll可以接受三个参数,$attributes,$condition,$params = null

第一个参数是要更新的值,第二个是条件,如果第二个条件中用了占位符,就必须 要有第三个条件。
平时我们查询 的时候用andWhere()可以连接很多参数,那么updateAll的时候,如果有多个参数怎么办?
Test::updateAll(['status'=>1],['status'=>0,'flag'=>1]);
如果参数都是固定值,这样的写法当然OK,如果有范围值就只能这样写了,比如flag != 1怎么办?
Test::updateAll(['status'=>1],['and',['status'=>0],['<>','flag',1]]);  
 
Over
 
PS:参考:http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail

PHP 7 DomDocument not found

 升到PHP7后,当用到DomDocument的时候,报错说class DomDocument not found。。。

用php -m|grep xml,可以看到libxml是被加载的。
 
根据官方文档:
XML/HTML代码
  1. This extension requires the libxml PHP extension. This means that passing in --enable-libxml is also required, although this is implicitly accomplished because libxml is enabled by default.  
证明没有错。
事实上也有很多人遇到了这个问题,怎么破?对于我用apt-get install的人来说,实在太方便了。
直接:
apt-get install php7.0-xml
搞定。
 
参考:http://stackoverflow.com/questions/35668702/php-7-domdocument-not-found
 
 

show一个Uber该死的BUG

自从升到IOS正式版后,Uber就再也不能用了。为咩?原来是这货的一个BUG(也可能不是,就纯粹是为了炫耀效果也未必)

 
如果你的手机性能不佳,你可能关闭了那个动态效果,然而uber的这个bug就是。。。你如果关了动态效果,你就不能叫车,因此如果你发现uber其他功能正常,但就是不能叫车。
这时候你进:设置->通用->辅助功能->将减弱动态效果关闭
 
再退出uber重进,你能发现又可以开始叫车了。
 

[转]Git使用https方式记住密码

老是会忘,所以抄下来做个笔记:

 
 
XML/HTML代码
  1. Git使用https方式进行连接时,默认每次推送时都要输入用户名和密码。  
  2.   
  3. 可以使用命令  
  4.   
  5. git config credential.helper store  
  6.   
  7. 为当前仓库设置记住密码,设置后,只要在推送一次,以后就不需要用户名和密码了。  
  8.   
  9. 只要运行后,下次push/pull的时候再输入一次密码,git就会记住啦!再次push/pull的时候就不用输用户名和密码了。  
  10.   
  11. 转自:http://www.yalewoo.com/git_https_password.html