开始使用yii2,但是被里面的弄得很迷惑,component和model的区别是什么样的。以下是一些自己的心得,可能有错误,请指正:1)发现yii2一些规律,在@app/models/*文件有2种类型。比如InfoForm这样以Form结尾的文件都是继承自Model,而Info.php这样的表名的文件都是继承自ActiveRecord。但疑问的是在github上看到的一些yii2的程序,里面的全部都写在一个Info.php这样的里面。(不过网络上使用yii2开发的开源程序真的是少得可怜,没有研究)2)component与model的区别到底是在哪里?什么情况下该用component什么情况下该用model?貌似继承自ActiveRecord的Info.php这样的就只是一个单独的这样文件:phpnamespaceapp\models;useyii\base\ActiveRecord;classInfoextendsActiveRecord{publicfunctionstatictableName(){return'{{%my_post}}';}}然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:1.先检测用户当前的积分是否充足?如果不充足失败且提示。2.执行积分扣除3.成功写入积分变更日志像第3点这样的,该写在那个文件,特别让人疑惑/models/Member.php还是/models/MemberQuery.php还是/components/Member/ScoresUse.php4)如果真的像【积分扣除】【用户封禁】这样的功能都制作成单独的组件components,那么ActiveRecordmodels那么岂不就真的就只剩下第2点里面说的这一段内容的?另外如果真的是这样,那岂不component变得异常的庞大,但问题是执行【积分扣除】【用户封禁】这样的操作,不是单独某个表的,如果放到/models/Member.php里面去执行,需要调用额外的其他表,显然又不符合规范,显得很混乱。5)比如【积分扣除】【用户封禁】这样的操作必须可以让正在登陆用户自行调用,又可以让登陆的管理员自行登陆,所以,似乎归类到model来说完全不适合?归类到component却又还不如直接用function单独函数更方便?比如执行【积分扣除变更】功能:php/***@description操作用户积分!*@param$mid*@param$jftype*@paramstring$tips*@paramnull$jfValue2*@returnbool*/functionlog_jifen_change($mid,$jftype,$tips='',$jfValue2=null){global$dsql;$jfvalue=$jfValue2&&is_numeric($jfValue2)?$jfValue2:jifen_value($jftype);if($dsql->ExecuteNoneQuery2("UPDATE#@__memberSETscores=scores+'$jfvalue'WHEREmid='".$mid."'")){$rs=$dsql->GetOne("SELECT`scores`FROM`#@__member`WHERE`mid`='{$mid}'");$scoresLeft=$rs['scores'];$setarr=array('mid'=>$mid,//会员ID'jftype'=>$jftype,//积分代码'jftime'=>time(),//操作时间'jfvalue'=>$jfvalue,//本次变更积分'tips'=>$tips,//提示内容'jfleft'=>$scoresLeft,//剩余的积分);$dsql->ExecuteNoneQuery("INSERTINTOgk_member_jflogSET".MkSetSql($setarr));return$scoresLeft;}returnfalse;}PHP中什么时候该用component什么时候该用model?特别让人迷惑。。。
至尊宝的传说
相关分类