你需要知道的前10名玛格托2概念
你需要知道的前10名玛格托2概念

你需要知道的前10名玛格托2概念

2016年3月31日发布 in 发展
现在在Magento Connect:addshppers
2016年3月19日
magento 2 dev docs classy llama博客
用Classy Llama为Magento 2做好准备’s Dev Docs.
2016年4月13日

你是一个尚未将潜水进入Magento 2的Magento开发人员吗?没有恐惧,因为,到本文的结尾,你’肯定是一个Bonafide Magento 2专家!

好吧…也许不是。毕竟,学习magento是一个艰难的任务,这对于平台的版本2仍然是正确的。几百字符aren’显然,真的要让你起来和跑步。但是,如果你’喜欢我,不知道从哪里开始,可能是关于潜水的最令人恐惧的东西。所以 真实的 本文的目的是让您概述来自Magento 1的最重要差异’ll encounter.

 

当您在新平台中潮湿时,您可能会惊喜地发现与您的线路编码有关’ll写真真的是。因此,对一些主要的建筑概念有一点洞察力将使您的过渡到Magento 2 Guru的过渡。

在我们真的开始之前,如果你不’Magento 2有一个 越来越多的文档主题 进入更精细的细节。

模块结构

如果你’还没有熟悉 作曲家, the resoundingly popular PHP dependency manager, now is the time to become so, since the software is integral to the structure of Magento 2. Instead of a single core codebase, Magento is now a collection of individual components installed via Composer. This applies to third-party libraries and Magento core modules/themes (i.e., packages) alike. Package dependencies have been formalized such that any particular “version”Magento实际上可以以这些组件的版本及其依赖性表示。

如果你’你是一个可分配的magento extensions的开发人员’ll也是创建作曲家包。然而,在更广泛的说明上,通过Magento的变化促进了这种独立组件所需的封装类型’S结构确保让您的代码更轻松地让生活更轻松,无论您的代码是市场扩展还是只是本地自定义:与模块相关的所有文件现在都驻留在一个目录中。在Magento 1 PHP文件中,布局XML,模板和静态资产分散在整个位置,现在单个功能的所有文件都在一起生活。一个模块’s top-level directory contains the familiar Block, 模型, etc. sub-directories (or really any sub-directories in which you wish to place your classes), along with a 看法 sub-directory. Within 看法/adminhtml or 看法/frontend are layout and template directories, and a web directory that contains the module’静态资产,如JavaScript和CSS。

PUB目录和代码生成

生活在众多地点的静态资产文件的概念以及这一提出的问题是进入下一个重要主题的完美SEGUE。自动化代码生成和部署在Magento 2中发挥着巨大的作用,并且可以通过查看PUB目录部分地理解这​​些功能。虽然它’可以使用Magento安装’s根目录作为您的Web root在开发环境中,生产所需的Web root是新的Pub目录,除了所有应用程序代码之外,只包含Magento放在那里(包括主要应用程序入口点,媒体和静态视图文件)。由于现场代码现在存在于此指定的Web根目录之外,因此访问控制更加严格和可预测,并且新的部署/编译过程使先前提到的模块封装成为可能:

  • 静态视图文件部署 将所有必要的静态资产从其源中的应用程序代码中的所有必要的静态资产进行实现到Web可访问的PUB目录中。此部署过程在开发模式下自动发生,但需要在生产中进行显式动作。这种自动部署资产是允许所有JS / CSS代码在其适当的模块中生活,但仍然是在集中位置的网络上访问。
  • 代码生成 doesn’T涉及PUB目录,但它’与部署概念密切相关。现有的PHP类现在由Magento自动生成,并促进比过去是可能的更粒度和不引人注目的定制。

依赖注入

依赖注入 在Magento是一个巨大的主题,所以我’ll cover it only in the broadest terms here. Magento 1 had its factory methods that facilitated class overrides, like Mage::getModelMage::helper. This is replaced in Magento 2 by a more structured approach whereby all external types are injected as parameters in a class’S构造函数如下:

通过Magento自动实例化并通过此方法的类型’S对象管理器。这有助于使用真正的类名和PHP命名空间而不是通过专有工厂方法使用乱丢代码,它通过集中引用依赖性来实现更具组织的代码,并且它允许更灵活的方法来覆盖类。注意在上面的代码中,一个依赖关系只引用一个接口,而不是完整的类。界面是Magento 2和依赖性的重点 偏好 在特殊配置文件中定义– 迪.xml. –指定此类接口的最佳默认实现。此DI配置是第三方模块用于更改默认接口或全类课程的首选项(相当于Magento 1’S类重写)或针对特定的上下文(通过构造函数中的集中组成)。通过构造函数注射获得的外部类是共享实例(即,a“singleton”模式)并被称为“injectables.”

插件

如前所述,Magento 1类重写在指定依赖注入首选项的能力中找到它们的模拟。我还提到,由于M2,可以实现更不显眼的定制技术’S代码生成,和 插件 是最重要的例子。插件允许您更改或扩展目标方法,而不是需要替换整个类。

Like preferences, plug-ins are defined in 迪.xml. files, and they have specific “before,” “after” and “around”实现分别允许您更改原始方法的输入,以其输出进一步操作,或使用自己的逻辑运行。总之,可以在单个方法上定义多个插件,从而大大提高了在系统的同一区域操作的扩展之间的兼容性。 M2’S代码生成和Object Manager会通过右转,并根据需要将其移为插件。以下是插件的定义和实现的本地示例:

工厂

在依赖注入的主题上,您可能已经注意到了显着的遗漏。“Injectables,”作为共享实例对象,真的是m1的等同物’s Mage::getSingleton factory technique. So where is the equivalent of the Mage::getModel factory method for obtaining unique object instances (that is, “non-injectables”在m2 parlance)?使用专用于目的的可注射类别来实例化这些对象: 工厂。观察以下使用工厂类以实例化模型:

您对上述第一反应可能是认为定义和维护一个课程只是为了处理另一个课程似乎繁琐。在这方面,M2的益处’S代码再次来到救援,因为工厂课程实际上不’需要完全定义t。每当遇到对此类工厂的参考时,它们会自动创建由Magento创建。特定于类的方法意味着你 能够 然而,明确地定义它们,从而在必要时手机自定义了任何特定类的工厂技术。

服务层

与依赖注入一样,服务层本身就值得一整系列文章(请参阅服务的核心文档 合同设计模式)但是,基本概念可以用一点解释掌握。考虑到Magento 1中定制的主要挑战之一是,几乎肯定依赖于参考核心Magento类的具体实施细节以及该核心代码的重大更改(例如方法参数或逻辑的更改)可能会呈现自定义代码不可操作的自定义代码。 M2服务层通过在模块的主要业务逻辑与引用该模块的任何外部代码之间引入层来缓解此问题’s components. “Service contracts”采用僵硬定义实体的接口形式和外部代码与它们交互的规定方式;这些接口和从服务层实现它们的类。

例如,让’s consider the core Customer entity. 玛托托\Customer\Model\Customer is the model for a customer entity, and this class has corresponding resource and collection models that serve the same purpose as their M1 counterparts. Rather than reference these classes directly, however, external modules should utilize a sort of traffic controller class called 玛托托\Customer\Model\ResourceModel\CustomerRepository to obtain and manipulate instances of 玛托托\Customer\Model\Data\Customer. Both classes implement service contract interfaces, and while they use the typical data and collection models under the hood, the methods exposed in the interfaces make this implementation invisible and explicitly define the details external code can rely on. The logic of models and collections may change to any degree in the future, but the details of the service contracts will remain the same, preserving the compatibility of custom modules.

服务合同接口位于模块的API子目录中。如果你’re生产可分配代码,强烈建议您为自己的实体创建服务合同和课程,以保持与他人的未来兼容性’ code.

页面缓存

在Magento 1中,完整页面缓存是企业专用可用的性能增强功能,并在您的自定义开发功能中容纳它并不完全是最琐碎的开发主题。在M2中,全页缓存是社区和企业的一个特征,生活在Magento_PageCache的模块中,其对开发人员的影响更加简化。

完整页面缓存的中央挑战是网页的那些区域,其内容对于所有访问者和页面浏览量都无法普遍。 M1专注于将这些区域的组装内容作为最终HTML输出的渲染的一部分,而M2采用不同–越来越受欢迎–方法。首先,应该从主高速缓存内容解码的页面块更稳定地定义为“private data”:依赖访客的内容’■会话信息。其次,在页面的初始渲染中的所有访问者中,这些块是匿名的,并且在传递主页内容之后通过Ajax请求加载私有数据。因此,页面的主体被缓存并尽可能快地传递,具有不同步的必要和访问者特定的内容。

就开发人员的影响而言,与M1相比,容纳页面缓存几乎恰到不简单。将块标记为私有数据与设置单个属性一样简单,而Magento则负责休息:

CSS编译

自响应于其主题的响应式大修以来,CSS编辑以SASS / COMPARD的形式是MAGENTO的一部分1. MAGENTO 2中的选择工具较少,这会带来相同的功能,包括CSS变量,混合可重复样式,包含包含等多文件组织的。

覆盖这一点 在m2中更少的细节 超出本文的范围,但掌握的重要概念是M2开发人员如何处理CSS编译(或者,更准确,确实如此准确 不是 deal with it). In M1’S响应主题,编译是Magento申请完全看不见的过程;开发人员负责将源代码编译为最终CSS文件,然后通过始终完成,通过布局明确包含。在M2中,CSS编译魔法是在应用程序级别完成的,作为上述静态文件部署过程的一部分。只需确保将较少的源文件包含在适当的位置,而Magento将处理其余部分。 (它’值得注意的是’处理汇编仍然有利 在开发过程中不同,但重点是该过程大量集成到应用程序核心中。)

Any underscore-prefixed source files placed in the 看法/{area}/web/css/source directory of a module or the web/css/source directory of a theme will be compiled into the main styles, with only a single instance of a unique name being loaded site-wide, depending upon a priority order (thus allowing for override of specific partials). On top of this, the magically named _module.less_widgets.less (for modules) and _extend.less (for themes) allow styles to be cumulative instead of directly overriding the identically named partials from other sources.

JavaScript包含和要求

玛托托 2已经过改进了它的技术,包括从明确要求每个JS文件的传统方法中包含JavaScript的技术“include-as-needed”方法主要利用 quertjs.。 (看 这一页 在Magento中的Requirejs上的信息。这可确保仅在需要时且以必要的顺序加载JavaScript组件。

该过程几乎可以被视为依赖注入的JS版本,并且有 几种方法要做 在 Magento. Here’■一个简单的例子,需要组件“mage/url”作为机箱内代码的依赖性,在该文件返回的类中作为函数的参数:

玛托托介绍的另外两种方式由Magento介绍,立即拨打jQuery插件到特定选择器,可以在Magento文档页面上进行研究。命名组件位置的精确定义在名为Requirejs-config.js的每个模块文件中设置,并且如依赖项注入,这种配置允许通过使用自己的定义来轻松扩展和覆盖组件。

JavaScript组件

将很好地建议javascript-revish开发人员不仅熟悉包括JS代码的技术,而且还有一些有力系统化的方法,Magento也需要自己的JavaScript。首先,它’值得注意的是,M2从jQuery UI库和自己的自定义小部件中致力于jQuery小部件。当你’RE开发JS-RELUTE接口,非常值得在您自己代码中使用此模式。

一个更复杂的主题是js类Uicomponent(与M2不同’s UI组件 图书馆)和布局,JS和静态模板可以一起工作。在此范例中,可以通过布局XML初始化扩展UIComponent的JS组件,并通过布局XML传递给它们。在这种配置中,可以是用于呈现组件的静态模板路径的定义,该组件通过Ajax加载而不参与PHP,并且包含 昏死 语法动态访问JS组件公开的属性和方法。获得这种特定模式的句柄将采取一些研究Magento核心使用情况和淘汰的功能,但这是一个例子的最糟糕的片段:

How the above fits into the layout structure and how its parent block initializes such components is beyond what I can cover in such limited space. However, know that the above defines the path to the JS file that represents this component (米达特.js, containing a class that extends uiComponent) and a static template file loaded straight from the server (内容.html), which contains Knockout code referencing logic from 米达特.js.

可以提到Magento 2的众多其他较小的架构变化,您可以提及和您’LL熟悉它们,因为您的小型企业进入新平台变得更大。然而,对于寻找一个地点的开发人员来说,上面的主题代表了您可以花费你的Magento 2培训时间的一些最佳方式。开始掌握这些概念,而你’肯定可以开始将M2视为温暖的朋友而不是一个不祥的陌生人。

2 Comments

  1. 凯瑟队 说:

    谢谢,那个’伟大的概况玛格托!

  2. jehzlau. 说:

    伟大的概览。经过多年的爱M1,仍然很难切换有很多复杂的集成工作。它’秒再次重做网站,即使它’没有真正要求重做。也许我们’从现在开始升级10年。 *叹*

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

本网站使用AkisMet减少垃圾邮件。 了解如何处理评论数据.

最近的帖子查看全部
3月1日,2021年

Covid的巨大加速要求再次欺诈和消费者虐待警惕

2月3日,2021年

社交媒体在科迪德自然时期的增长’s One

1月5日,2021年

替代社交媒体

您是否注意到您的Facebook和Instagram内容似乎越来越少,并且每次通过都会越来越少?用于达到的帖子 […]