手把手教你创建magento2插件
手把手教你创建magento2插件
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 MagentoFrameworkComponentComponentRegistrar::register( MagentoFrameworkComponentComponentRegistrar::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
完成后,再次打开浏览器 发现样式都乱了 什么鬼?
别怕,这是因为没有找到静态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> </router> </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