mvc - 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?特别让人迷惑。。。
回复内容:
开始使用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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。
