indexer 索引机制
magento2自带索引机制,例如catalog是一个EAV结构,所以catalog的数据很分散,查询效率比较低,系统每次reindex都会把catalog数据通过indexer机制转移到一个简单表(带有flat的表)上,这样查询效率就得到优化。大多数情况下不需要了解这个概念,系统会自动完成,但如果你通过setup添加EAV attibute或者field,你就必须在indexer.xml声明它。
EAV
数据库EAV结构。简单来说就是能在后台管理中加字段的Model,就像Drupal的CCK。
E
->实体
A
-> 属性
V
-> 值
实体存储的是数据类型的信息。就Magento而言,就是Customer,Category,Product等。
属性是每个实体的单独属性(比如name,weight,email)。
值是实体某个属性的值。
更多资料请参考
Magento 2数据库EAV模型结构
Dependency Injection 依赖注入,简称DI
老PHPer也会对这个很陌生,这是来自Java并且发扬光大的概念,它在magento2占有最重要的地位。它能很好处理OOP结构的依赖耦合问题。有了它,你可以通过di.xml的声明去替换任何一个class。要理解依赖注入最好先从Java资料入手,PHP关于依赖注入的内容很少。
event 事件
在magento1.x就存在,也是过去很多系统使用的程序注入方式,与Joomla的plugin和Drupal的hook是一样的。使用event必须系统主动提供对应的事件名,例如“登录时”,“登出时”,“购买后”等。
plugin 插件
很多系统使用相同的术语,但意思各不相同,plugin在各种系统的实现也不一致。magento2的plugin可以让你扩展或者改造某个class的public method。DI也能实现相同的效果,但plugin更安全,它像event一样可以功能叠加,又不必像event那样需要系统主动提供event。它事实上也是基于DI实现的。对于扩展一个功能时,建议的使用顺序是:plugin > event > DI
Setup 安装脚本
安装一个新module,所需的数据结构及数据也会同时安装到mysql中,这是安装脚本实现的。你看到InstallSchema.php和InstallData.php就是安装脚本。
requirejs / knockoutjs
magento2是大量使用requirejs和knockoutjs,所以必须掌握,并且系统还把knockoutjs扩展成一套组件框架,所以就算过去学过knockoutjs,也需要学习这套框架,才能调整模板。
layout / container / block
magento2外观的三大元素。block就是页面内容的载体,所有内容不论是程序输出还是后台输入,都会由block中被显示。container是block的容器,决定了block所在页面上的位置。layout是一大堆声明container和block的xml。
UI component
系统后台几乎所有内容都从javascript中加载到页面,并且难以通过view找到相关模板代码,这是因为后台是使用一套统一的UI component,很多元素是重用的,例如grid(列表功能),component form等。它们也是由一堆XML来声明,用的都是默认模板,搞后台功能避不开UI component,官方文档也不丰富,我是从默认组件的代码来研究它如何使用。
WebApi / Repository
magento有很丰富的API功能,并且有完善的API实现机制,即使实现自己的API也很容易。所有webapi通过webapi.xml来声明,Repository是webapi的功能实现部分。webapi不只是用于第三方系统,magento2在购物过程中也会通过webapi完成购物过程。怎么用javascript使用webapi也是很重要的知识点。
Materialized view 物化视图
这是来自于Oracle的概念,目的是优化数据库视图功能的查询效率,原理是把用表用作视图并保持这个视图表与原始表的数据同步。magento2参考这个原理实现了自己的物化视图机制,它在mview.xml中声明,用于实现indexer功能,所以如果要为自己的功能增加索引功能,就需要了解这个概念。