了解OpenCart中的登錄檔和引導程式物件

2021-10-07 10:55:41 字數 4435 閱讀 5548

儘管典型的引導過程涉及很多元件,但在本教程的過程中,我們將重點關注「 registry」和「 loader」物件。 本文介紹的**段屬於opencart 2.0.x版。 儘管「登錄檔」類**在1.5.x和2.0.x版中是相同的,但「裝載程式」類**已發生了很大變化。 因此,我們將專注於opencart的2.0.x版本。

顧名思義,當呼叫「 set」方法時,「登錄檔」物件用於儲存從簡單變數到複雜物件的元素。 它使用「鍵」儲存所有元素,因此稍後在呼叫「 get」方法時可以輕鬆訪問它們。

讓我們仔細看一下類檔案本身。 在您喜歡的文字編輯器中開啟位於「 system / engine / registry.php」的檔案!

<?php

final class registry

public function set($key, $value)

public function has($key)

}

如您所見,類定義非常容易理解。 它將所有內容儲存在物件的「資料」屬性中,該屬性宣告為陣列,作用域是私有的。 在「 get」方法中,它檢查「 value」是否可用於所需的「 key」,如果可用,則返回該值,否則返回「 null」。 在「 set」方法中,它使用傳遞給該方法的引數將新元素插入「 data」陣列。 最後,它提供了「具有」方法來檢查某個「鍵」是否已經設定到「資料」陣列中。

現在,讓我們看看opencart框架在頁面執行的初始階段如何使用登錄檔物件。 在opencart的文件根目錄中開啟「 index.php」檔案。 您會看到$registry物件在指令碼執行的早期就建立了。

// registry

$registry = new registry();

建立$registry物件後,它使用「 set」方法儲存其他幾個物件。 讓我們看幾個例子。

<?php

// loader

$loader = new loader($registry);

$registry-­>set('load', $loader);

// config

$config = new config();

$registry-­>set('config', $config);

// database

$db = new db(db_driver, db_hostname, db_username, db_password, db_database);

$registry-­>set('db', $db);

// request

$request = new request();

$registry-­>set('request', $request);

// session

$session = new session();

$registry-­>set('session', $session);

我在這裡列出了$registry物件的一些用法示例。 您可能已經注意到,經常使用的物件被建立並儲存在登錄檔中。 原因是您不必多次例項化公共類物件,因此您只需呼叫$registry物件的「 get」方法即可使用所需的物件。 該方法與「單人模式」(singleton pattern)有點相似,在這種情況下,您不得不保留該類的單個例項。

現在,$registry物件填充了有用的東西,但是如何使用呢? 讓我們看看如何在「帳戶」模組的「活動」模型中使用儲存在$registry$db物件。 開啟位於「 catalog / model / account / activity.php」的檔案。 您可以看到,在「 addactivity」方法中,觸發了插入查詢。

$this->db->query("insert into `" . db_prefix . "customer_activity`

set `customer_id` = '" . (int)$customer_id . "', `key` = '" .

$this->db->escape($key) . "', `data` = '" . $this->db->escape(serialize($data)) .

"', `ip` = '" . $this->db->escape($this->request->server['remote_addr']) .

"', `date_added`= now()");

您可能想知道它的呼叫方式,因為在「 modelaccountactivity」類中沒有定義「 db」方法或屬性。 您可以轉到父模型類「 model」以檢視是否在其中定義了它。 是的,您也不會在該類中找到「 db」方法或屬性。 但是,如果仔細觀察「 model」類,您會發現它實現了魔術方法,在這種情況下,尤其是「 __get」方法。

public function __get($key)
現在,讓我們假設$registry物件儲存在「 model」類的受保護的「 registry」屬性中。 我們將看到在「 loader」類中例項化「 model」時如何儲存它。

當您呼叫類中未定義的任何方法時,將呼叫__get方法。 在此方法中,當我們嘗試在「 activity.php」檔案中呼叫$this->db,將「 db」作為引數傳遞。 如前所述,$registry具有所有在引導過程中儲存的實用程式物件。 因此,我們只需要通過呼叫「 registry」物件的「 get」方法使用鍵來獲取「 db」物件!

同樣,$this->load可以從控制器檔案中工作。 因此,總的來說,「登錄檔」是opencart框架中非常有用的元件,它儲存了指令碼執行過程中經常使用的常用變數和物件。

「 loader」物件用於根據需要載入opencart的不同元件,例如模型,控制器,語言,檢視,庫等。在此必須注意,當建立「 loader」物件時,它將儲存在$registry物件,以「 load」作為陣列鍵。 因此,您可以使用$this->load呼叫來訪問$loader物件,如上一節所述。

// loader instantiation

$loader = new loader($registry);

$registry-­>set('load', $loader);

現在,讓我們看看如何使用「 loader」載入不同的元件。 開啟「 system / engine / loader.php」以檢視「 loader」類的定義。 我們將從「控制器」方法開始,以了解其工作方式。

// load controller

$this->load->controller('common/column_left');

這是乙個**片段,它載入「 common / column_left.php」控制器並呼叫「 index」方法。 我們進行此呼叫以獲取opencart頁面「左列」的xhtml輸出。$this->load部分的工作原理與我之前解釋的$this->db示例相似! 因此,它返回儲存在$registry$loader物件,最後它將呼叫「 loader」類的「 controller」方法!

以同樣的方式,以下**片段可以載入不同的元件。

// load model

$this-­>load-­>model('catalog/category');

// load view

$this­->load-­>view('default/template/product/category.tpl', $data);

// load library

$this­->load-­>library('user');

// load helper

$this­->load-­>helper('json');

// load language

$this­->load-­>language('product/category');

檢視「 loader」類中的方法定義,您會發現準確了解其工作原理並不那麼複雜。 首先,它為相應的元件準備「檔案路徑」,並使用「 include_once」功能將其包括在內。

總體而言,「登錄檔」和「引導程式」是opencart框架中的兩個非常重要的元件,它們使模組開發人員的工作變得更加輕鬆。

因此,今天,我們研究了opencart框架的「 loader」和「 registry」元件。 希望您在本教程中學到了一些有用的東西。 希望我能針對同一主題提出更多建議! 使用下面的提要提交您的查詢和建議!

翻譯自:

了解登錄檔結構

在登錄檔中,所有的資料都是通過一種樹狀結構以鍵和子鍵的方式組織起來,就象我們的磁碟檔案系統的目錄結構一樣。每個鍵都包含了一組特定的資訊,每個鍵的鍵名都是和它所包含的資訊相關聯的。如果某個鍵包含了子鍵,則在登錄檔編輯器視窗中代表這個鍵的資料夾的左邊將有 符號,以表示在這個資料夾中有更多的內容。如果這個...

windows登錄檔 登錄檔的認識

登錄檔的特點 1.登錄檔允許對硬體 系統引數 應用程式和裝置驅動程式進行跟蹤配置,這使得修改某些設定後不用重新啟動成為可能。2.登錄檔中登入的硬體部分資料可以支援高版本的即插即用特性。當windows檢測到機器上的新裝置時,就把有關資料儲存到登錄檔中,另外,還可以避免新裝置與原有裝置之間的資源衝突。...

登錄檔學習筆記 登錄檔的位置

20180228 今天學習登錄檔的位置 文中說 在windows 98 me作業系統中,登錄檔主要由 system.dat 和 user.dat 這兩個登錄檔資料庫檔案組成。通常是在 c windows 中。system.dat包含系統硬體和軟體的設定,user.dat則儲存著與使用者有關的資訊。知...