Beauty Framework basierend auf PHP7 implementiert (mit Code)

不言
Freigeben: 2023-04-03 14:10:01
Original
1877 Leute haben es durchsucht

Dieser Artikel stellt Ihnen das Beauty Framework (mit Code) basierend auf PHP7 vor. Es hat einen gewissen Referenzwert. Ich hoffe, es wird Ihnen hilfreich sein.

Der Kern Die Verbindung des Frameworks reicht von der anfänglichen Auflösung der Anforderungsweiterleitung bis zur Verteilung des Controllers und der Dateninteraktion des Modells bis zur Antwort.
Die Verwendung anderer Frameworks zur Implementierung wird sehr umständlich sein, und es gibt zu viele integrierte Inhalte, von denen viele nicht benötigt werden. Deshalb habe ich ein einfaches und praktisches Framework geschrieben, das auf anderen Frameworks basiert.

Beginnen wir mit dem Routing:
1) Routing
Die Regeln des Routing-Protokolls verwenden den Vergleich regulärer Ausdrücke, um verschiedene Links an verschiedene Controller zu verteilen. Außerdem werden anonyme Aufrufe unterstützt Funktionen

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
Nach dem Login kopieren
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');
Nach dem Login kopieren

Der darin implementierte Kerncode: (ist es sehr einfach)

if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }
Nach dem Login kopieren

2) Controller
Nein, Sie Wohin auch immer es zeigt, die Anfrage kann verarbeitet werden, aber laut MVC wird empfohlen, es in den Controller zu schreiben, also machen wir es

3) Modellebene
Die Dao-Klasse Da viele Leute jetzt MySQL verwenden, werden die regulären Operationen von MySQL hier direkt integriert. Da die nativen Operationen der Datenbank viele Injektionen und andere Probleme verursachen, gibt es keine Unterstützung direkte QQuery-Methode.

4) DAO-Schicht
Da es in vielen Fällen notwendig ist, Lesen und Schreiben zu trennen, es jedoch zu umständlich ist, MySQL Proxy zu verwenden, um dies zu erreichen, wurde die Unterstützung implementiert Für Datenbankabfragen basierend auf Verschiedenen SQL werden jeweils Master- und Slave-Datenbanken verwendet.
Wie?

ist direkt nach nicht verwendeten Abfragevorgängen unterteilt. Ausgewählte Abfragevorgänge werden direkt der Lesedatenbank zugewiesen, und Einfügen, Aktualisieren und Löschen werden direkt der Schreibdatenbank zugewiesen. Sie können es auch direkt mit onMasterConnection/onSlaveConnection angeben. Sehen Sie sich an, wie Select es macht. Dieser Teil ist die Implementierungslogik:

    /**
     * 获取查询内容,以数组形式返回,数据内为array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }
Nach dem Login kopieren

5) Konfigurationsklasse

in Die Entwicklungsumgebung und die Produktionsumgebung verwenden unterschiedliche Konfigurationsumgebungen, und Sie können im Framework eine .env-Umgebung erstellen, um zu wechseln. Entwicklung und Produktion können routinemäßig in der Konfiguration festgelegt werden. Welche Umgebung verwendet wird, wird in .env

; This is a environment configuration file
environment=development
Nach dem Login kopieren

festgelegt. Natürlich gibt es auch einige öffentliche Konfigurationsinformationen, die direkt in der Konfigurationsdatei festgelegt werden können Kann in jeder Umgebung verwendet werden.
// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");
Nach dem Login kopieren

6) Antwort anfordern

Da keine Ansicht erforderlich ist und nur JSON-Daten zurückgegeben werden müssen, wird Text/JSON direkt in den Header geschrieben. = =
Andere Implementierungen

    Memcache und Redis verwenden konsistentes Hashing, um auf verschiedene Instanzen zuzugreifen.
  • Validator-Verifizierungsklasse
  • Die spezifischen Codes finden Sie auf Github https://github.com/tigerk/Beauty

Empfohlene verwandte Artikel:

Zend Framework Smarty-Erweiterungsimplementierungsmethode, zendsmarty


Zend Framework-Routing-Mechanismus-Codeanalyse, zendframework

Das obige ist der detaillierte Inhalt vonBeauty Framework basierend auf PHP7 implementiert (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!