开始使用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 这样的就只是一个单独的这样文件:
<code>php</code><code><br><?php namespace app\models; use yii\base\ActiveRecord; class Info extends ActiveRecord { public function static tableName(){ return '{{%my_post}}'; } } </code></code>
然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。
3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:
<code>1.先检测用户当前的积分是否充足?如果不充足失败且提示。 2.执行积分扣除 3.成功写入积分变更日志 </code>
像第3点这样的,该写在那个文件,特别让人疑惑 /models/Member.php
还是 /models/MemberQuery.php
还是 /components/Member/ScoresUse.php
4)如果真的像 【积分扣除】【用户封禁】这样的功能都制作成单独的组件components,那么ActiveRecord models那么岂不就真的就只剩下第2点里面说的这一段内容的?另外如果真的是这样,那岂不component 变得异常的庞大,但问题是执行【积分扣除】【用户封禁】这样的操作,不是单独某个表的,如果放到 /models/Member.php
里面去执行,需要调用额外的其他表,显然又不符合规范,显得很混乱。
5)比如 【积分扣除】【用户封禁】这样的操作必须可以让正在登陆用户自行调用,又可以让登陆的管理员自行登陆,所以,似乎归类到 model
来说完全不适合? 归类到 component
却又还不如直接用 function
单独函数更方便?比如执行 【积分扣除变更】功能:
<code>php</code><code>/** * @description 操作用户积分! * @param $mid * @param $jftype * @param string $tips * @param null $jfValue2 * @return bool */ function log_jifen_change($mid, $jftype, $tips = '', $jfValue2 = null) { global $dsql; $jfvalue = $jfValue2 && is_numeric($jfValue2) ? $jfValue2 : jifen_value($jftype); if ($dsql->ExecuteNoneQuery2("UPDATE #@__member SET scores=scores+'$jfvalue' WHERE mid='" . $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("INSERT INTO gk_member_jflog SET " . MkSetSql($setarr)); return $scoresLeft; } return false; } </code>
PHP中什么时候该用 component 什么时候该用 model?特别让人迷惑。。。
回复内容:
开始使用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 这样的就只是一个单独的这样文件:
<code>php</code><code><br><?php namespace app\models; use yii\base\ActiveRecord; class Info extends ActiveRecord { public function static tableName(){ return '{{%my_post}}'; } } </code></code>
然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。
3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:
<code>1.先检测用户当前的积分是否充足?如果不充足失败且提示。 2.执行积分扣除 3.成功写入积分变更日志 </code>
像第3点这样的,该写在那个文件,特别让人疑惑 /models/Member.php
还是 /models/MemberQuery.php
还是 /components/Member/ScoresUse.php
4)如果真的像 【积分扣除】【用户封禁】这样的功能都制作成单独的组件components,那么ActiveRecord models那么岂不就真的就只剩下第2点里面说的这一段内容的?另外如果真的是这样,那岂不component 变得异常的庞大,但问题是执行【积分扣除】【用户封禁】这样的操作,不是单独某个表的,如果放到 /models/Member.php
里面去执行,需要调用额外的其他表,显然又不符合规范,显得很混乱。
5)比如 【积分扣除】【用户封禁】这样的操作必须可以让正在登陆用户自行调用,又可以让登陆的管理员自行登陆,所以,似乎归类到 model
来说完全不适合? 归类到 component
却又还不如直接用 function
单独函数更方便?比如执行 【积分扣除变更】功能:
<code>php</code><code>/** * @description 操作用户积分! * @param $mid * @param $jftype * @param string $tips * @param null $jfValue2 * @return bool */ function log_jifen_change($mid, $jftype, $tips = '', $jfValue2 = null) { global $dsql; $jfvalue = $jfValue2 && is_numeric($jfValue2) ? $jfValue2 : jifen_value($jftype); if ($dsql->ExecuteNoneQuery2("UPDATE #@__member SET scores=scores+'$jfvalue' WHERE mid='" . $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("INSERT INTO gk_member_jflog SET " . MkSetSql($setarr)); return $scoresLeft; } return false; } </code>
PHP中什么时候该用 component 什么时候该用 model?特别让人迷惑。。。
真是,一下问这么多问题好难回答。
先说说什么时候继承 Model 什么时候继承 ActiveRecord?
当一个表单是操作多个表单的时候,建议你新建一个 From,From 只能继承 Model,每个表都要生成 Model,Model 都继承 ActiveRecord。
component 与 model 的区别到底是在哪里?
我认为他们两个没什么关系啊,component 是组件,model 一般映射一个表单或者一个数据库表。
如果你的积分业务比较多,而又比较复杂你可以写成事件,其他地方调用。
最后安利一下:https://github.com/forecho/awesome-yii2

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

在PHP中,弱引用是通过WeakReference类实现的,不会阻止垃圾回收器回收对象。弱引用适用于缓存系统和事件监听器等场景,需注意其不能保证对象存活,且垃圾回收可能延迟。

\_\_invoke方法允许对象像函数一样被调用。1.定义\_\_invoke方法使对象可被调用。2.使用$obj(...)语法时,PHP会执行\_\_invoke方法。3.适用于日志记录和计算器等场景,提高代码灵活性和可读性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
视觉化网页开发工具