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

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
