magento2是個開源PHP電商系統,同類的系統通常須要有HTML、CSS、Javascript、PHP/Psr4/MVC、Mysql等基礎,而使用magento2,也許須要先認識更多概念。javascript
老PHPer也會對這個很陌生,這是來自Java而且發揚光大的概念,它在magento2佔有最重要的地位。它能很好處理OOP結構的依賴耦合問題。有了它,你能夠經過di.xml的聲明去替換任何一個class。要理解依賴注入最好先從Java資料入手,PHP關於依賴注入的內容不多。php
在magento1.x就存在,也是過去不少系統使用的程序注入方式,與Joomla的plugin和Drupal的hook是同樣的。使用event必須系統主動提供對應的事件名,例如「登陸時」,「登出時」,「購買後」等。java
不少系統使用相同的術語,但意思各不相同,plugin在各類系統的實現也不一致。magento2的plugin可讓你擴展或者改造某個class的public method。DI也能實現相同的效果,但plugin更安全,它像event同樣能夠功能疊加,又沒必要像event那樣須要系統主動提供event。它事實上也是基於DI實現的。對於擴展一個功能時,建議的使用順序是:plugin > event > DImysql
安裝一個新module,所需的數據結構及數據也會同時安裝到mysql中,這是安裝腳本實現的。你看到InstallSchema.php和InstallData.php就是安裝腳本。
一個例子:
https://segmentfault.com/a/11...web
概念參考如下連接,不作太多解釋。簡單來講就是能在後臺管理中加字段的Model,就像Drupal的CCK。
http://simpleframework.net/ne...sql
magento2是大量使用requirejs和knockoutjs,因此必須掌握,而且系統還把knockoutjs擴展成一套組件框架,因此就算過去學過knockoutjs,也須要學習這套框架,才能調整模板。
一個例子:
https://segmentfault.com/a/11...數據庫
magento2外觀佈局的三大元素。block就是頁面內容的載體,全部內容不管是程序輸出仍是後臺輸入,都會由block中被顯示。container是block的容器,決定了block所在頁面上的位置。layout是一大堆聲明container和block的xml。
如下是layout的代碼例子:
https://segmentfault.com/a/11...segmentfault
系統後臺幾乎全部內容都從javascript中加載到頁面,而且難以經過view找到相關模板代碼,這是由於後臺是使用一套統一的UI component,不少元素是重用的,例如grid(列表功能),component form等。它們也是由一堆XML來聲明,用的都是默認模板,搞後臺功能避不開UI component,官方文檔也不豐富,我是從默認組件的代碼來研究它如何使用。api
magento有很豐富的API功能,而且有完善的API實現機制,即便實現本身的API也很容易。全部webapi經過webapi.xml來聲明,Repository是webapi的功能實現部分。webapi不僅是用於第三方系統,magento2在購物過程當中也會經過webapi完成購物過程。怎麼用javascript使用webapi也是很重要的知識點。安全
magento2自帶索引機制,例如catalog是一個EAV結構,因此catalog的數據很分散,查詢效率比較低,系統每次reindex都會把catalog數據經過indexer機制轉移到一個簡單表(帶有flat的表)上,這樣查詢效率就獲得優化。大多數狀況下不須要了解這個概念,系統會自動完成,但若是你經過setup添加EAV attibute或者field,你就必須在indexer.xml聲明它。
這是來自於Oracle的概念,目的是優化數據庫視圖功能的查詢效率,原理是把用表用做視圖並保持這個視圖表與原始表的數據同步。magento2參考這個原理實現了本身的物化視圖機制,它在mview.xml中聲明,用於實現indexer功能,因此若是要爲本身的功能增長索引功能,就須要瞭解這個概念。