Jadual Kandungan
回复内容:
Rumah pembangunan bahagian belakang tutorial php mvc - PHP 中什么时候用 component 什么时候用 Model,特别迷惑

mvc - PHP 中什么时候用 component 什么时候用 Model,特别迷惑

Jun 06, 2016 pm 08:34 PM
mvc php yii2 corak reka bentuk berorientasikan objek

开始使用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>
Salin selepas log masuk
Salin selepas log masuk

然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。

3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:

<code>1.先检测用户当前的积分是否充足?如果不充足失败且提示。
2.执行积分扣除
3.成功写入积分变更日志
</code>
Salin selepas log masuk
Salin selepas log masuk

像第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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

然后就没有写其他的功能代码了,其他的写在这个地方似乎不合适了。

3)接到上面第2点,比如当我要实现用户的积分扣除功能。流程逻辑应该如下吧:

<code>1.先检测用户当前的积分是否充足?如果不充足失败且提示。
2.执行积分扣除
3.成功写入积分变更日志
</code>
Salin selepas log masuk
Salin selepas log masuk

像第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>
Salin selepas log masuk
Salin selepas log masuk

PHP中什么时候该用 component 什么时候该用 model?特别让人迷惑。。。

真是,一下问这么多问题好难回答。

  1. 先说说什么时候继承 Model 什么时候继承 ActiveRecord?

当一个表单是操作多个表单的时候,建议你新建一个 From,From 只能继承 Model,每个表都要生成 Model,Model 都继承 ActiveRecord。

  1. component 与 model 的区别到底是在哪里?

我认为他们两个没什么关系啊,component 是组件,model 一般映射一个表单或者一个数据库表。

如果你的积分业务比较多,而又比较复杂你可以写成事件,其他地方调用。

最后安利一下:https://github.com/forecho/awesome-yii2

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

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

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

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

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

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

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

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

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

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,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

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

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

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 Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

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.

See all articles