在这篇博客中,我们将看到如何在magento2中创建新模块,创建路由并显示“hello world”。在magento2中,所有模块都位于文件夹app/code中,之前在magento1中有local/community/core/文件夹的概念,但现在已被删除。

 

步骤1

magento2中的模块名称分为两部分“VendorName_ModuleName”,例如Magento_Contact,Magento_Catalog或Magease_Test,第一部分是供应商,第二部分是实际模块。

我们将模块名称设为“Magease_Hello”,首先,我们需要创建文件夹

app/code/Magease/Hello

步骤2 - module.xml

接下来我们需要添加module.xml文件

app/code/Magease/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="Magease_Hello" setup_version="0.0.1"/>
</config>

步骤3 - registration.php

接下来需要添加registration.php

app/code/Magease/Hello/registration.php

内容是

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

步骤4

一个空模块准备就绪,现在我们需要启用它。

php bin/magento module:status

你应该看到

List of disabled modules:
Magease_Hello

这意味着模块已设置,但现在被禁用

要启用该模块,请运行该命令

php bin/magento module:enable Magease_Hello

这可以启用你的模块

另一种方法是,打开这个文件

app/etc/config.php

在这里可以看到很多模块,只需将你的模块添加到里面

...
'Magease_Hello' => 1,
....

这也可以启用你的模块,完成此步骤后,当您在浏览器中打开您的网站时,您将收到错误消息

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

运行命令以下解决这个问题

bin/magento setup:upgrade

在这一点上,您应该设置一个空模块。

您还可以在System Configuration -> Advanced -> Disable Modules Output查看你的模块

步骤5 – Routes

现在来给我们的模块添加一个路由(或url),以便可以显示“hello world” 
magento中的路由分为3个部分

http://mymagento.com/index.php/route_id/controller/action

index.php是可选的,取决于您的magento配置。如果你有.htaccess文件,index.php不是必需的

要添加路由,我们需要添加routes.xml文件

Magease/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="magease" frontName="magease">
            <module name="Magease_Hello" />
        </route>
    </router>
</config>

我们通常保持id和frontName相同,否则它可能引起一些问题

这里我们定义了我们的路由的第一部分,所以到目前为止我们的路由是

www.mymagento.com/magease/* 

接下来我们需要定义我们的控制器,控制方法

假设我们的URL是

www.mymagento.com/magease/hello/world

为此我们需要创建以下文件夹

Magease/Hello/Controller/Hello/World.php

并添加以下内容

<?php
namespace Magease\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; } }

如果您已正确执行所有步骤并在浏览器中打开URL,则会看到输出“Hello World”

重要事项
1.还有一点需要注意,如果您错过控制器或控制方法名称,它会自动默认为索引。意思是,像www.mymagento.com/magease这样的网址会找到路径Magease/Hello/Controller/Index/Index.php
2.另一个重要的事情是,magento创建自动生成的文件在var/generation/Excellence/Hello/Controller因此,如果您发现您对控制进行了更改但是更改未生效,这时确保删除生成的缓存文件。

自己尝试一下以确保你理解了
1.创建一个像/magease_test/hello_world/test这样的网址

2.创建一个像/magease/world这样的网址

3.创建一个/magease这样的网址