# Magento 2如何创建模块\[教程\]

**URL:** https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38
**Category:** Magento 2.X
**Tags:** 开发, 后端, 模块
**Created:** [2017 年10 月 16 日 16:46 UTC](https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38 "2017-10-16T16:46:51Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### 作者： ![Shuai](https://forum.magentochina.org/user_avatar/forum.magentochina.org/shuai/32/3_2.png) [@Shuai](https://forum.magentochina.org/u/Shuai)
#### 发布日期： [2017 年10 月 16 日 16:46 UTC](https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38/1 "2017-10-16T16:46:51Z")

</div>

本教程翻译自:mageplaza  
完整的[Magento2开发中文教程请点击这里](https://forum.magentochina.org/t/Magento2%E6%A8%A1%E5%9D%97%E5%BC%80%E5%8F%91%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B%E7%B4%A2%E5%BC%95/36)

正文:

#Magento2如何创建模块

我们将讨论如何在Magento 2中创建 **Hello World** 模块，以 **最清晰最简单** 的创建方法让你记住。

注意: **local/ community/ core/** 文件夹的概念只存在于Magento 1中， **Magento 2中没有** 。

###第一步:创建Hello World模块的文件夹  
模块的名称被定义为 “VendorName\_ModuleName”。第一部分是开发商的名称，最后一部分是模块的名称  
例如:Magento\_Helloworld,Magentochina\_Helloworld。如下文件夹:

> app/code/Magentochina/Hello

以上模块的开发商是Magentochina，模块名是Hello

###第二步：增加模块配置文件文件module.xml

该文件是必须增加的,路径为:

> app/code/Magentochina/Hello/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="Magentochina_Hello" setup_version="0.0.1"/>
</config>

```

###第三步:增加注册文件registration.php

文件路径:

> app/code/Magentochina/Hello/registration.php

该文件内容:

```
 <?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Magentochina_Hello',
  __DIR__
);

```

###第四步:激活模块

当完成第三步，我们已经创建了一个Hello world的模块.下面我们一步步激活它.  
再命令行模式,我们先查看该模块的状态

> php bin/magento module:status

输入该命令之后，我们会看见这个模块在禁用列表里.

> List of disabled modules: Mageplaza\_Hello

输入以下命令激活该模块:

> php bin/magento module:enable Magentochina\_Hello

另外一种激活该模块的方式是先找到文件:

> app/etc/config.php

然后在该文件里找到自己编写的模块,并把标志改为1,如:

```
...
  'Magentochina_Hello' => 1, 
....

```

现在我们已经激活这个模块了，但是现在当我们打开浏览器访问，会发现Magento 2提示错误:

**Please upgrade your database: Run “bin/magento setup:upgrade” from the Magento root directory.**

我们跟着这个提示运行命令升级数据库:

> php bin/magento setup:upgrade

运行完毕之后，再访问Magento 2就没有上面的那个错误了。这个时候你打开后台 **System Configuration → Advanced → Disable Modules Output** 会找到你的模块

###第五步:创建路由

在这一步,我们要实现打开一个URL显示 **Hello world**.

magento的路由分为3个部分:Route\_id、控制器和动作，如下:

```
 http://magentostore.com/index.php/route_id/controller/action

```

首先，我们需要增加一个路由文件:routes.xml

> Magentochina/Hello/etc/frontend/routes.xml

这是一个前端路由,所以我们在frontend文件夹里创建.如果你是想创建后台的,就需要在adminhtml文件夹里创建.  
路由配置文件的内容:

```
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
    <route id="mageplaza" frontName="magentochina">
        <module name="Magentochina_Hello" />
    </route>
</router>

```

您应定义id和FrontName是相同的，因为在安装过程中可能会出现一些错误。  
在定义路由的第一部分后，URL将显示为:

```
www.magentochina.org/magentochina/*

```

然后，您将继续定义控制器，动作  
你的网址现在应该是:

```
www.magentochina.org/magentochina/hello/world

```

现在我们创建文件:

> Magentochina/Hello/Controller/Hello/World.php

文件内容:

```
 <?php
namespace Mageplaza\Hello\Controller\Hello;
 
class World extends \Magento\Framework\App\Action\Action
  {
  public function __construct(
    \Magento\Framework\App\Action\Context $context)
    {
        return parent::__construct($context);
   }
 
public function execute()
  {
      echo 'Hello World';
      exit;
  } 
}

```

####完成所有步骤后，记得[首先刷新缓存](https://doc.magentochina.org/guides/v2.1/config-guide/cli/config-cli-subcommands-cache.html)，然后打开URL时，应该在浏览器中显示输出“Hello World”。  
####我们希望我们翻译的教程对你们非常有用。  
####翻译:西帅

---

<div class="post-metadata">

### 作者： ![zhou](https://forum.magentochina.org/letter_avatar_proxy/v4/letter/z/3e96dc/32.png) [@zhou](https://forum.magentochina.org/u/zhou)
#### 发布日期： [2017 年10 月 19 日 07:23 UTC](https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38/2 "2017-10-19T07:23:46Z")

</div>

按上面步骤做完，结果一直报404错误，最后清理了下缓存，问题解决。

---

<div class="post-metadata">

### 作者： ![Shuai](https://forum.magentochina.org/user_avatar/forum.magentochina.org/shuai/32/3_2.png) [@Shuai](https://forum.magentochina.org/u/Shuai)
#### 发布日期： [2017 年10 月 19 日 08:03 UTC](https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38/3 "2017-10-19T08:03:10Z")

</div>

> [@回复 zhou](#):
>
> 按上面步骤做完，结果一直报404错误，最后清理了下缓存，问题解决。

好，我修订一下文章。非常感谢反馈。任何问题请联系我们

---

<div class="post-metadata">

### 作者： ![liujian](https://forum.magentochina.org/letter_avatar_proxy/v4/letter/l/8797f3/32.png) [@liujian](https://forum.magentochina.org/u/liujian)
#### 发布日期： [2018 年6 月 20 日 03:48 UTC](https://forum.magentochina.org/t/magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38/4 "2018-06-20T03:48:10Z")

</div>

你好，我也按照这个教程来 也清空了缓存 还是404.
