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'。
这样 一个最简单的插件就完成了。