手把手教你创建magento2插件

管理员组 admin 2018-4-17 1530

m2的插件写法跟m1结构大体有点像,但是还是有很大不同。
插件都放在app/code下,如果没有code目录,就手动创建一个app/code。
跟m1一样,比如插件为Zou_HelloWorld, Zou是供应商名,HelloWorld是其插件名。

要创建HelloWorld插件,您需要完成以下步骤:

  • 第1步:创建HelloWorld插件的文件夹  -> 插件源代码目录
  • 第2步:创建etc/module.xml文件  ->   插件的核心配置文件,定义版本号。
  • 第3步:创建registration.php文件  -> 用于向系统注册该插件
  • 第4步:创建composer.json文件 ->  用于添加依赖以及打包
  • 第5步:启用该插件

第一步:创建HelloWorld插件的文件夹

app/code/Zou/HelloWorld


第2步:创建etc/module.xml文件。

app/code/Zou/HelloWorld/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="Zou_HelloWorld" schema_version="1.0.0"  setup_version="1.0.0">
    </module>
</config>


第3步:创建registration.php文件

app/code/Zou/HelloWorld/registration.php

内容是:

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


第4步:创建composer.json文件

app/code/Zou/HelloWorld/composer.json

内容是:

{
	"name" : "zou/helloworld",
	"description" : "demo",
	"require" : {
		"php" : "~5.5.0|~5.6.0|~7.0.0"
	},
	"type" : "magento2-module",
	"version" : "1.0.0",
	"license" : [
		"OSL-3.0",
		"AFL-3.0"
	],
	"autoload" : {
		"files" : [
			"registration.php"
		],
		"psr-4" : {
			"zou\\helloworld\\" : ""
		}
	}
}


第5步:启用该模块

在根目录下执行命令

php bin/magento module:status

应该看到该模块现在被禁用
List of disabled modules: Zou_HelloWorld

执行命令 启用该模块

php bin/magento module:enable Zou_HelloWorld

或者直接修改config.php文件

vim app/etc/config.php

找到Zou_HelloWorld 并设为1

 'Zou_HelloWorld' => 1,

这样模块就可用了

然后前台打开浏览器,发现报错:
Please upgrade your database: Run “bin/magento setup:upgrade” from the Magento root directory.

执行下面的命令即可

php bin/magento setup:upgrade

完成后,再次打开浏览器 发现样式都乱了 什么鬼?

image http://bbs.mallol.cn/assets/images/1-6goQ4I59jWEdJiuN.png

别怕,这是因为没有找到静态css/js文件,需要手动生成一下,执行如下命令即可

php bin/magento setup:static-content:deploy


我们可以用下面的命令查看插件的状态:

php bin/magento module:status

如果为1的话 就是已安装的;为0就是未安装的。


接下来,我们定义一个控制器来测试

首先得创建一个路由
在magento的路由分为3个部分:路由名称,控制器和action如下例:

http://test.mallol.cn/index.php/frontname/controller/action

要添加路由,需要创建routes.xml文件

vim app/code/Zou/HelloWorld/etc/frontend/routes.xml

由于这是一个前端路由,我们将其添加到frontend/下面,如果是后端路由,我们需要将其添加到adminhtml/下面
这个前端路由routes.xml的内容为:

<?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 id="helloworld" frontName="helloworld">
        <module name="Zou_HelloWorld" />
    </route>
</route>
</config>


定义路由的第一部分后,URL将显示为:

 http://<yourhost.com>/helloworld/*


那么,我们将继续Controller和action

您需要创建的文件夹和文件是:

app/code/Zou/HelloWorld/Controller/Index/Test.php

内容将是:

<?php
namespace Zou\HelloWorld\Controller\Index;
class Test extends \Magento\Framework\App\Action\Action{	
    protected $_pageFactory;	
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $pageFactory)
    {		
        $this->_pageFactory = $pageFactory;		
        return parent::__construct($context);	
    }	
    
    public function execute()	{
        echo "Hello World";
        exit;
    }
}

熟悉m1的童鞋会有点纳闷,怎么action不是写在控制器文件里面,而是单独分开呢?
对,没错,m2就是这么设计的,把action都独立分成单独的文件了,这样更清晰,有效的避免了控制器文件内容太长的问题。

完成后,运行清缓存命令:

php bin/magento cache:clean

再检查结果。

你的网址现在应该是:

 http://<yourhost.com>/helloworld/index/test

完成所有步骤后,当你打开URL时,浏览器上会显示'Hello World'。
这样 一个最简单的插件就完成了。

当然一个完整的插件 包括Block,etc,Helper,Model,Setup,view,i18n。我们下次再讲。


插件demo源码下载

https://github.com/zouhongzhao/magento2-extension-demo




想深入学习得话,可以参考:

https://www.kancloud.cn/zouhongzhao/magento2-in-action/628442


最后于 2月前 被admin编辑 ,原因:
最新回复 (0)
返回
发帖