Inhaltsverzeichnis
回复内容:
Heim Backend-Entwicklung PHP-Tutorial mvc - PHP 中什么时候用 component 什么时候用 Model,特别迷惑

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

Jun 06, 2016 pm 08:34 PM
mvc php yii2 面向对象设计模式

开始使用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>
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

像第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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

像第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>
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

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

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

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

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles