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功能,因此若是要为本身的功能增长索引功能,就须要了解这个概念。