Magento 自定义模块:在 Magento 2 中逐步创建它
已发表: 2020-11-11Magento 自定义模块是任何 Magento 开发人员的关键开发过程。 如您所知,在某个时间点,开发人员可能需要集成他自己的功能或模块。 在今天的这篇博文中,我们将逐步指导您在 Magento 2 中开发自定义模块
最新更新:我们刚刚发布了 Claue Multipurpose Magento 2 主题的 2.0 版,其中包含一系列性能改进和独家功能。 立即查看此主题:Claue Magento Theme 2. 0
现场演示
Claue – Clean, Minimal Magento 2&1 Theme是现代和干净的电子商务商店的绝佳模板,具有 40 多种主页布局和大量商店、博客、投资组合、商店定位器布局和其他有用页面的选项。 Claue 版本 2. 0 带有一系列独家功能,包括:
- 基于 Luma 主题。
- 满足 Magento 主题的所有标准
- 显着的性能提升
- 与大多数第三方扩展兼容。
- 与 Magento 2.4.x 完全兼容
第二个高级版本与之前的版本完全不同。 因此,如果您使用的是 Claue 版本 1 并想更新到 Claue 版本 2,则只能重建新网站,而不是从旧版本更新。 现在,让我们回到主题。
Magento 是一个非常通用的平台,具有许多有用的功能,并支持免费和付费模块。 它提供了可以在线安装以及可以定制的模块,以满足客户的需求。 定制是通过生成一个模块来实现的,然后可以利用PHP语言的力量根据选择进行修改。 例如,如果我们的网站具有市场上不常见的特定功能或一组功能或要求,则一个模块可以为我们填补这一空白。
Magento 带有 3 种类型的代码池(代码、核心和本地),自定义和核心模块驻留在其中。 本地池(文件夹)是所有自定义模块所在或应该放置的位置。 下面给出的是模块应包含的组件。
- 块- 在这里您需要提供用于在我们的模板中显示数据的功能。
- 模型——所有业务逻辑都包含在这里。
- 资源——模型包括用于数据库交互的函数。
- 控制器- 定义页面布局和块文件,并在请求 URL 时加载。
- 等——包括 XML 格式的配置文件,显示 Magento 模块有多少文件以及模块如何交互。
- 助手——包括用于定义常见业务逻辑的函数(例如图像调整大小、验证)。 这些函数可以在 Magento 应用程序的任何地方使用
- sql – 包含用于创建、修改或删除 SQL 表的 SQL 脚本。
如何创建 Magento 自定义模块?
在 Magento 2 中创建一个简单的模块
在 Magento 2 中生成一个简单的模块很容易。 您将需要完成以下任务:
- 为模块创建一个新目录
- 创建
registration.php
脚本 - 创建
etc/module.xml
信息文件 - 安装新模块
为模块创建一个新目录
新目录的位置有两个选项可供选择
app/code/{vendor}/
-
vendor/{vendor}/
如果您的模块适用于您正在开发的特定在线商店,您可以选择第一个选项。 但是,如果您生成一个模块的目的是在各种网站上使用它,那么选择第二个选项更合适。 现在,我将在此示例中使用第一个选项。
首先,您需要创建一个名为EndPoint
(我们的供应商名称)的目录,其中包含一个子目录MyModule
:
cd {website_root} mkdir -p app/code/EndPoint/MyModule
创建registration.php脚本
registration.php
文件告诉 Magento 以特定名称和位置注册新模块。
使用以下代码生成名为app/code/EndPoint/MyModule/registration.php
的文件
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'EndPoint_MyModule' , __DIR__ );
创建 etc/module.xml 信息文件
在这一步,您需要创建我们的模块信息文件,我们将在其中指定模块版本号。 首先,我们必须在app/code/EndPoint/MyModule
中生成etc
目录:
mkdir app/code/EndPoint/MyModule/etc
然后使用以下命令行创建module.xml
<?xml version="1.0"?> < config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:Module/etc/module.xsd" > < module name = "EndPoint_MyModule" setup_version = "1.0.0" > </ module > </ config >
安装新模块
现在我们需要安装并启用新模块,所以从我们的网站根目录,我们需要运行命令
php bin/magento setup:upgrade
Magento 将取出模块名称和配置更新列表,并且新模块EndPoint_MyModule
应列在该列表中
向我们的模块添加自定义路由
现在我们有一个工作的、启用的模块,但它还没有做任何事情! 检查我们的模块是否启用的简单方法是什么? 让我们设置一个自定义路由,所以如果我们点击像https://{our_website}/mymodule/test/helloworld
这样的 URL,我们可以从控制器返回自定义响应。
创建自定义路由本身需要一些步骤:
- 为控制器创建一个新目录
- 创建一个
etc/routes.xml
文件 - 创建控制器
- 升级新模块
为控制器创建一个新目录
首先,我们需要创建一个新目录,用于自定义路由的新 PHP 控制器将驻留在该目录中。 新的目录路径应该是:
app/code/EndPoint/MyModule/Controller
您可以根据我们所需的路径生成任意数量的目录级别。 例如,如果您在app/code/EndPoint/MyModule/Controller
中生成一个名为Index
的类,将被路由到该控制器的 URL 将是https://{our_website}/mymodule/index
(“控制器”目录是忽略)。
购买 如果您在app/code/EndPoint/MyModule/Controller/Test
中生成一个名为HelloWorld
的类,则生成的 URL 将为https://{our_website}/mymodule/test/helloworld
。
创建 etc/routes.xml 文件
routes.xml
会告诉 Magento 什么基础 URL 将用于我们的模块。 首先,我们需要创建需要放置 routes.xml 文件的“frontend”目录:
mkdir app/code/EndPoint/MyModule/etc/frontend
当您需要基本 URL 为MyModule
时,您必须在新目录中生成一个 XML 文件,该文件会将向给定 URL 发出的所有请求路由到我们的模块控制器:
<?xml version="1.0" ?> < config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:App/etc/routes.xsd" > < router id = "standard" > < route frontName = "mymodule" id = "mymodule" > < module name = "EndPoint_MyModule" /> </ route > </ router > </ config >
创建控制器
如果我们想响应对https://{our_website}/mymodule/test/helloworld
的请求,您需要生成基本Controller
目录和Test
子目录:
mkdir -p app/code/EndPoint/MyModule/Controller/Test
在这个目录下,你需要生成我们自定义的 Magento 控制器。 所有路由控制器都应该扩展\Magento\Framework\App\Action\Action
。 我们还需要一个公共的construct()
方法来将上下文传递给我们的祖先和一个execute()
一个函数,该函数将在URL 被命中时被调用:
<?php namespace EndPoint \ MyModule \ Controller \ Test ; class HelloWorld extends \ Magento \ Framework \ App \ Action \ Action { public function __construct ( \Magento\Framework\App\Action\Context $context ) { parent ::__construct( $context ); } public function execute () { echo "Hello world!" ; } }
升级新模块
在这一步,您需要升级我们的 Magento 设置。 但是因为您在构造中包含了一个从依赖注入器获取参数的新控制器。 您还需要编译依赖注入引擎(例如工厂、代理和拦截器)。 最后,您需要清除缓存,以便从我们的自定义 URL 提供新内容:
php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento cache:flush
就是这样。 在您的浏览器中打开/helloworld/index/index URL,您应该会看到如下内容: 这意味着我们的模块正在运行!
教程到此结束: Magento 自定义模块:在 Magento 2 中逐步创建它。我们希望这是一个对您有用的博客。 如果您想了解更多有关 Magento 的信息,可以阅读我们的 Magento 平台文章以了解更多详细信息,还记得查看我们的 Magento 2 扩展和我们的 Magento 2 主题以支持您的网站。