magento2开发,需要关注的知识点

9.61K 浏览开发笔记

magento2开发,需要关注的知识点

magento2是个开源PHP电商系统,同类的系统一般需要有HTML、CSS、Javascript、PHP/Psr4/MVC、Mysql等基础,而使用magento2,也许需要先认识更多概念。

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就是安装脚本。

EAV

概念参考以下链接,不做太多解释。简单来说就是能在后台管理中加字段的Model,就像Drupal的CCK。

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也是很重要的知识点。

indexer 索引机制

magento2自带索引机制,例如catalog是一个EAV结构,所以catalog的数据很分散,查询效率比较低,系统每次reindex都会把catalog数据通过indexer机制转移到一个简单表(带有flat的表)上,这样查询效率就得到优化。大多数情况下不需要了解这个概念,系统会自动完成,但如果你通过setup添加EAV attibute或者field,你就必须在indexer.xml声明它。

Materialized view 物化视图

这是来自于Oracle的概念,目的是优化数据库视图功能的查询效率,原理是把用表用作视图并保持这个视图表与原始表的数据同步。magento2参考这个原理实现了自己的物化视图机制,它在mview.xml中声明,用于实现indexer功能,所以如果要为自己的功能增加索引功能,就需要了解这个概念。

最后于 2018-4-20 被admin编辑 ,原因:
2