Magento2.x版本已经发布一段时间了,到现在为止已经到2.2了,最新版本可以关注Magento在github上的更新。今天记录下Magento2.1如何创建一个module,直接进入正题。 安装Magento2后,进入项目的根目录后,进入/app目录,只有app/design/,app/etc/两个文件夹,design/目录是存放主题内容,安装成功后,在etc/文件夹下会多出config.php和env.php两个php文件,config.php可以看到magento2加载了那些模块,类似magento1.x的eetc/modules/文件夹,env.php保存了连接的数据库的一些信息,如果你要更改项目连接的数据库,可以在env.php里面修改,类似Magento1.x的local.xml文件。用过Magento1.x,应该发现app目录少了code目录,对头,这里我们也要新建code目录,用来存放我自己编写的模块代码,首先需要创建一个"<namespace>"(这里我用Silk),在这个<namespace>下,新建我们的"<modules>"(这里我用Test),目录结构如下所示:
--magento2.1
|---code
|---Silk
|---Test
|---design
|---etc
|---config.php
|---env.php
创建好我们的<namespace>和<modules>之后,接下来就需要创建一系列的文件,我们依次来说每个文件如何创建。 模块声明
在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="Silk_Test" setup_version="1.0.0.0" active="true" />
</config>
"module" 标签说明 :
Module registration这里需要在module的根目录下创建一个"registration.php"文件
在registration.php中编写如下代码:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Silk_Test',
__DIR__
);
查看module是否激活打开app/etc/config/php文件后,这时你会发现没有刚才我们编写的module,这里需要利用终端进入到magento2的根目录执行magento命令: php bin/magento setup:upgrade 执行完成之后,你将会在config.php中看到刚才我们写的module。 接下来,我们就来创建前端控制器。 路由声明创建前端控制器时,需要新建etc/frontend/routes.xml文件,来声明前端控制器的名称。
在routes.php中编写如下代码:
<?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="test" frontName="test">
<module name="Silk_Test" before="Magento_Core"/>
</route>
</router>
</config>
<router>标签说明:
<route>标签说明:
<router>标签说明:
创建前端控制器比如我们的URL为:local.magento2.com/test,继续创建文件
控制器中代码如下:
<?php
namespace Silk\Test\Controller\Index; //这里使用了php的命名空间
use Magento\Framework\App\Action\Action;
class Index extends Action {
/** @var \Magento\Framework\View\Result\Page */
protected $resultPageFactory;
/*** @param \Magento\Framework\App\Action\Context $context*/
public function __construct(\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory) {
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
/**
* @return \Magento\Framework\View\Result\PageFactory
*/
public function execute()
{
echo "this is Silk_Test_Controller_Index_Index";
die();
}
}
现在访问刚才的路由URL,就可以看到浏览器输出内容了。
解决办法就是到根目录执行命令 php bin/magento setup:upgrade 自定义URL上面我们的URL很简单,为local.magento2.com/test,实际上magento将它转化成了local.magento2.com/test/index/index,test为/etc/routes.xml下我们定义的frontName名,第一个index是位于Controller文件夹下的Index文件夹名,第二个index是位于Index文件夹下的Index.php名,比如我们现在要我们的URL为:local.magento2.com/test/hello/world,我们该如何创建文件呢?示例如下:
//File:app/code/Silk/Test/Controller/Helo/World.php
Silk
|---Test
|--Controller
|--Hello
|---World.php
World.php内容如下:
<?php
namespace Silk\Test\Controller\Hello;
use Magento\Framework\App\Action\Action;
class World extends Action {
/** @var \Magento\Framework\View\Result\Page */
protected $resultPageFactory;
/*** @param \Magento\Framework\App\Action\Context $context*/
public function __construct(\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory) {
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
/**
* @return \Magento\Framework\View\Result\PageFactory
*/
public function execute()
{
echo "this is Silk_Test_Controller_Hello_World";
die();
}
}
创建Block上面我们说了如何从控制器输出内容到页面,但是真正与浏览器页面最相关的还是由对应的Block输出数据,那么如何创建一个block呢?我们来修改下我们控制器app/code/Silk/Test/Controller/Helo/World.php里面的内容:
namespace Silk\Test\Controller\Hello;
use Magento\Framework\App\Action\Action;
class World extends Action {
/** @var \Magento\Framework\View\Result\Page */
protected $resultPageFactory;
/*** @param \Magento\Framework\App\Action\Context $context*/
public function __construct(\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory) {
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
/**
* @return \Magento\Framework\View\Result\PageFactory
*/
public function execute()
{
$this->_view->loadLayout();
$this->_view->getLayout()->initMessages();
$this->_view->renderLayout();
}
}
接着创建block文件
Hello.php中代码如下:
<?php
namespace Silk\Test\Block;
class Hello extends \Magento\Framework\View\Element\Template
{
public function _prepareLayout()
{
//return parent::_prepareLayout();
}
}
(责任编辑:最模板) |

ecshop仿寺库中国奢侈品网
人气:923
ecshop紫色化妆品模板
人气:664
ecshop仿米奇化妆品商城程
人气:1349
Ecmall仿亚马逊英文外贸多
人气:1755
ecshop抽奖插件免费送出
人气:5881
一号店模板|ecshop综合模板
人气:514